понедельник, 29 сентября 2008 г.

Использование Secure Cookies в Oracle ApEx

Поддержка Secure Cookies в процедурах login ApEx - сравнительно новый функционал, который поддерживается начиная с версии 3.1.

Первое применение, которое напрашивается - в случае защиты login-страниц приложений просто переписать процесс Login, добавив соответствующий параметр в вызов процедуры wwv_flow_custom_auth_std.login:

wwv_flow_custom_auth_std.login(
P_UNAME => :P101_USERNAME,
P_PASSWORD => :P101_PASSWORD,
P_SESSION_ID => v('APP_SESSION'),
P_FLOW_PAGE => :APP_ID||':1',
P_USE_SECURE_COOKIE => TRUE);

Однако, при реальном применении начинаются неочевидные проблемы. Например, до настройки SSL и перезаписи в Web-сервере (OHS), войти в приложение становится невозможным.

Поскольку приложения ApEx могут быть использованы по-всякому, хотелось бы получить несколько более гибкую схему, причем желательно, чтобы выбор режима передачи cookie был автоматическим, в зависимости от установок Web-сервера.

Прелесть в том, что решение заключается в использовании Web-toolkit Oracle:

if lower(owa_util.get_cgi_env('REQUEST_PROTOCOL')) = 'https'
then
wwv_flow_custom_auth_std.login(
P_UNAME => :P101_USERNAME,
P_PASSWORD => :P101_PASSWORD,
P_SESSION_ID => v('APP_SESSION'),
P_FLOW_PAGE => :APP_ID||':'||<номер домашней страницы приложения>,
P_USE_SECURE_COOKIE => TRUE);
else
wwv_flow_custom_auth_std.login(
P_UNAME => :P101_USERNAME,
P_PASSWORD => :P101_PASSWORD,
P_SESSION_ID => v('APP_SESSION'),
P_FLOW_PAGE => :APP_ID||':'||<номер домашней страницы приложения>);
end if;

Решение настолько очевидно, что удивительно, как его просмотрели разработчики ApEx.

В действительности стоило бы включить генерацию именно такого блока процесса Login по умолчанию при создании login-страниц приложения.

Комментариев нет: