Настройка доменной аутентификации в Oracle Application Express
Шаг 1.
ВАЖНО. Для выполнения первых трех шагов потребуются права sys.
Все нижеперечисленные скрипты необходимо выполнять в любом удобном вам редакторе (sql developer, sql navigator, toad, да хоть в sqlplus для самых смелых).
Для начала создаем принципала (по сути ораклового пользователя)
CREATE USER apex_ldap_auth IDENTIFIED BY <password>;
И сразу его лочим, ибо нефиг :)
ALTER USER apex_ldap_auth ACCOUNT LOCK;
Шаг 2.
Создаем ACL и подписываем его.
BEGIN
DBMS_NETWORK_ACL_ADMIN.create_acl (
acl => '<acl_file_name>.xml',
description => 'ACL to grant access to LDAP server',
principal => 'APEX_LDAP_AUTH',
is_grant => TRUE,
privilege => 'connect',
start_date => SYSTIMESTAMP,
end_date => NULL);
DBMS_NETWORK_ACL_ADMIN.assign_acl (
acl => '<acl_file_name>.xml', --указываем имя acl созданного выше
host => 'ldap.<sample>.ru', --Здесь необходимо указать ваш контроллер домена
lower_port => 389, --порт по умолчанию для ldap, для ldaps это как правило 636
upper_port => NULL);
COMMIT;
END;
Шаг 3.
Приступаем непосредственно к подготовке пакета
create or replace package apex_ldap_auth.pack_apex_ldap_auth as
function ldap_auth(p_username in varchar2, p_password in varchar2) return boolean;
end pack_apex_ldap_auth;
create or replace package body apex_ldap_auth.pack_apex_ldap_auth is
FUNCTION ldap_auth(
p_username IN VARCHAR2,
p_password IN VARCHAR2
)
RETURN BOOLEAN IS
l_ldap_host VARCHAR2(256) := ' ldap.<sample>.ru';
l_ldap_port VARCHAR2(256) := '389';
l_ldap_base VARCHAR2(256) := 'dc=<SAMPLE>,dc=ru'; --base DN можете уточнить у своих системных администраторов.
l_dn_prefix VARCHAR2(100) := '<domain_prefix>\'; -- здесь указываем префикс домена. Т.е. пользователю будет достаточно указать только логин.
l_retval PLS_INTEGER;
l_session DBMS_LDAP.session;
BEGIN
-- Choose to raise exceptions.
DBMS_LDAP.use_exception := TRUE;
-- Connect to the LDAP server.
l_session := DBMS_LDAP.init(hostname => l_ldap_host,
portnum => l_ldap_port);
l_retval := DBMS_LDAP.simple_bind_s(ld => l_session,
dn => l_dn_prefix || p_username,
passwd => p_password);
-- No exceptions mean you are authenticated.
RETURN TRUE;
EXCEPTION
WHEN OTHERS THEN
-- Exception means authentication failed.
l_retval := DBMS_LDAP.unbind_s(ld => l_session);
APEX_UTIL.set_custom_auth_status(p_status => 'Incorrect username and/or password');
RETURN FALSE;
END ldap_auth;
end pack_apex_ldap_auth;
ну и раздаем гранты целевой схеме
GRANT EXECUTE ON apex_ldap_auth.pack_apex_ldap_auth TO <schema_name>;
Шаг 4.
Приступаем непосредственно к настройке апексового приложения.
Переходимо в наше приложение / Shared Components / Authentication Schemes
Здесь создаем схему аутентификации.
Название - произвольное
Тип схемы – «Custom»
Далее указываем функцию из созданного пакета.
Все, с этого момента достаточно указывать доменный логин (без префикса/постфикса домена) и пароль соответственно.
Очень полезная ссылка по данному варианту настройки доменной авторизации.
https://oracle-base.com/articles/misc/oracle-application-express-apex-ldap-authentication
Есть еще и «Коробочное» решение для насnройки ldap.
Путь прежний – ваше приложение / shared components / authentication schemes
Далее выбираем тип «LDAP Directory»
Другие статьи на тему APEX:
- Установка и конфигурирование Oracle Application Express 5 (APEX) и Oracle REST Data Services 3 (ORDS) для сервера приложений Weblogic 12
- Создание домена в weblogic 12с и запуск его как службы Windows
- Настройка доменной аутентификации в Oracle Apex
- Как настроить постраничную авторизацию в Oracle APEX
- Подключение схемы (таблицы) в Oracle Application Express 5 (APEX)
- Создание приложения в Oracle Application Express 5 (APEX)
- Перенос APEX приложения из среды разработки в продуктовую среду