APEX_AUTHENTICATION
パッケージには、認証プラグインのための公開APIが用意されています。
トピック:
このパッケージでは、次の定数が使用されます。
c_default_username_cookie constant varchar2(30) := 'LOGIN_USERNAME_COOKIE';
このプロシージャは、外部ログイン・ページのランディング・リソースです。このプロシージャのコールは、ブラウザから直接行います。
構文
APEX_AUTHENTICATION.CALLBACK ( p_session_id IN NUMBER, p_app_id IN NUMBER, p_ajax_identifier IN VARCHAR2, p_x01 IN VARCHAR2 DEFAULT NULL, p_x02 IN VARCHAR2 DEFAULT NULL, p_x03 IN VARCHAR2 DEFAULT NULL, p_x04 IN VARCHAR2 DEFAULT NULL, p_x05 IN VARCHAR2 DEFAULT NULL, p_x06 IN VARCHAR2 DEFAULT NULL, p_x07 IN VARCHAR2 DEFAULT NULL, p_x08 IN VARCHAR2 DEFAULT NULL, p_x09 IN VARCHAR2 DEFAULT NULL, p_x10 IN VARCHAR2 DEFAULT NULL );
パラメータ
表3-1に、CALLBACK
プロシージャで使用可能なパラメータを示します。
表3-1 APEX_AUTHENTICATION.CALLBACKプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
Application Expressセッション識別子。 |
|
データベース・アプリケーション識別子。 |
|
システム生成のAJAX識別子。「GET_AJAX_IDENTIFIERファンクション」を参照してください。 |
|
外部ログインによって認証プラグインに渡されるオプション・パラメータ。 |
例1
この例では、外部ログイン・ページにリダイレクトが行われ、認証の成功時に外部ログインのリダイレクト先となるApplication Expressにコールバックが渡されます。
declare l_callback varchar2(4000) := apex_application.get_callback_url; begin sys.owa_util.redirect_url( 'https://single-signon.example.com/my_custom_sso.login?p_on_success='|| sys.utl_url.escape ( url => l_callback, escape_reserved_chars => true ); apex_application.stop_apex_engine; end;
例2
この例では、外部ログイン・ページの共有表にユーザー・データを保存し、データへのハンドルを使用してコールバックを実行します。Application Expressでは、コールバックによって認証プラグインのAJAXコードがアクティブ化されます。これは、値x01
を取ることができ、共有表から実際のユーザー・データをフェッチできます。
---- create or replace package body my_custom_sso as procedure login ( p_on_success in varchar2 ) is l_login_id varchar2(32); begin l_login_id := rawtohex(sys.dbms_crypto.random(32)); insert into login_data(id, username) values (l_login_id, 'JOE USER'); sys.owa_util.redirect_url ( p_on_success||'&p_x01='||l_login_id ); end; ---- end my_custom_sso;
このファンクションは、外部ログイン・ページのランディング・リクエストとして使用されるURLを戻すプラグイン・ヘルパー・ファンクションです。ブラウザによってリクエストが送信されると、認証プラグインのAJAXコールバックがトリガーされ、ユーザーはこれを使用してログインできます。
構文
APEX_AUTHENTICATION.GET_CALLBACK_URL ( p_x01 IN VARCHAR2 DEFAULT NULL, p_x02 IN VARCHAR2 DEFAULT NULL, p_x03 IN VARCHAR2 DEFAULT NULL, p_x04 IN VARCHAR2 DEFAULT NULL, p_x05 IN VARCHAR2 DEFAULT NULL, p_x06 IN VARCHAR2 DEFAULT NULL, p_x07 IN VARCHAR2 DEFAULT NULL, p_x08 IN VARCHAR2 DEFAULT NULL, p_x09 IN VARCHAR2 DEFAULT NULL, p_x10 IN VARCHAR2 DEFAULT NULL ) return VARCHAR2;
パラメータ
表3-2に、GET_CALLBACK_URL
ファンクションで使用可能なパラメータを示します。
表3-2 APEX_AUTHENTICATION.GET_CALLBACK _URLファンクションのパラメータ
パラメータ | 説明 |
---|---|
|
外部ログインによって認証プラグインに渡されるオプション・パラメータ。 |
例
「CALLBACKプロシージャ」の例を参照してください。
このファンクションは、デフォルトのログイン・ページから、ユーザー名に使用されるCookieを読み取ります。
構文
APEX_AUTHENTICATION.GET_LOGIN_USERNAME_COOKIE ( p_cookie_name IN VARCHAR2 DEFAULT c_default_username_cookie ) return varchar2;
パラメータ
表3-3に、GET_LOGIN_USERNAME_COOKIE
ファンクションで使用可能なパラメータを示します。
表3-3 APEX_AUTHENTICATION.GET_LOGIN_USERNAME_COOKIEファンクションのパラメータ
パラメータ | 説明 |
---|---|
|
ブラウザにユーザー名を保存するためのCookie名。 |
例
この例では、GET_LOGIN_USERNAME_COOKIE
によって、ユーザー名のCookieの値をページ・アイテムP101_USERNAME
に保存します。
:P101_USERNAME := apex_authentication.get_login_username_cookie;
このファンクションは、セッションでユーザーが認証されているかどうかをチェックし、ユーザーがログイン済である場合はTRUEを、カレント・セッションのユーザーが未認証である場合はFALSEを戻します。
構文
APEX_AUTHENTICATION.IS_AUTHENTICATED return BOOLEAN;
パラメータ
なし。
例
この例では、IS_AUTHENTICATED
を使用して、ユーザーがログイン済である場合はユーザー名を、ログインしていない場合は通知を生成します。
if apex_authentication.is_authenticated then sys.htp.p(apex_escape.html(:APP_USER)||', you are known to the system'); else sys.htp.p('Please sign in'); end if;
このファンクションは、ユーザーがセッションで承認されていないかどうかをチェックします。ユーザーがログイン済である場合はFALSEを、カレント・セッションのユーザーが未承認である場合はTRUEを戻します。
構文
APEX_AUTHENTICATION.IS_PUBLIC_USER return BOLLEAN;
パラメータ
なし。
例
この例では、IS_PUBLIC_USER
を使用して、ユーザーがログインしていない場合は通知を、ログイン済である場合はユーザー名を表示します。
if apex_authentication.is_public_user then sys.htp.p('Please sign in'); else sys.htp.p(apex_escape.html(:APP_USER)||', you are known to the system'); end if;
このプロシージャは、カレント・セッションのユーザーを認証します。
ログイン・プロセスの手順は、次のとおりです。
認証スキームの認証前プロシージャを実行します。
認証スキームの認証ファンクションを実行して、ユーザー資格証明(p_username、p_password)をチェックし、成功した場合はTRUEを戻します。
結果がTRUEの場合は、認証後の処理を実行します。
結果がTRUEの場合は、セッション表にユーザー名を保存します。
結果がTRUEの場合は、ディープ・リンクにリダイレクトURLを設定します。
結果がFALSEの場合は、カレント・ページにリダイレクトURLを設定し、notification_msgパラメータにエラー・メッセージを含めます。
認証結果を記録します。
リダイレクトします。
構文
APEX_AUTHENTICATION.LOGIN ( p_username IN VARCHAR2, p_password IN VARCHAR2, p_uppercase_username IN BOOLEAN DEFAULT TRUE );
パラメータ
表3-4に、LOGINプロシージャで使用可能なパラメータを示します。
表3-4 APEX_AUTHENTICATION.LOGINプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
ユーザーの名前。 |
|
ユーザーのパスワード。 |
|
|
例
この例では、認証スキームにユーザー資格証明、ユーザー名およびパスワードを渡します。
apex_authentication.login('JOE USER', 'mysecret');
このプロシージャは、セッションを終了し、アプリケーションのホームページにリダイレクトします。このプロシージャのコールは、ブラウザから直接行います。
構文
APEX_AUTHENTICATION.LOGOUT ( p_session_id in number, p_app_id in number, p_ws_app_id in number default null );
パラメータ
表3-5に、LOGOUTプロシージャで使用可能なパラメータを示します。
表3-5 APEX_AUTHENTICATION.LOGOUTプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
終了するセッションのApplication Expressセッション識別子。 |
|
データベース・アプリケーション識別子。 |
|
Webシート・アプリケーション識別子。 |
例
この例では、セッションの終了を記録します。
apex_authentication.logout(:SESSION, :APP_ID);
このプロシージャは、カレント・セッションのユーザーを認証します。これによって、手順1および2を除く、login()の一部が実行されます。手順は、「LOGINプロシージャ」を参照してください。これは主に、ユーザー資格証明のチェックがApplication Expressの外部で行われる認証スキームで役立ちます。
構文
APEX_AUTHENTICATION.POST_LOGIN ( p_username IN VARCHAR2, p_password IN VARCHAR2, p_uppercase_username IN BOOLEAN DEFAULT TRUE );
パラメータ
表3-6に、POST_LOGINプロシージャで使用可能なパラメータを示します。
表3-6 APEX_AUTHENTICATION.POST_LOGINプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
ユーザーの名前。 |
|
ユーザーのパスワード。 |
|
|
例
このプロシージャ・コールは、認証スキームにユーザー資格証明、ユーザー名およびパスワードを渡し、ユーザーの認証を完了します。
apex_authentication.post_login('JOE USER', 'mysecret');
このプロシージャは、ユーザー名に使用されるCookieを送信します。
構文
APEX_AUTHENTICATION.SEND_LOGIN_USERNAME_COOKIE ( p_username IN VARCHAR2, p_cookie_name IN VARCHAR2 DEFAULT c_default_username_cookie );
パラメータ
表3-7に、SEND_LOGIN_USERNAME_COOKIE
プロシージャで使用可能なパラメータを示します。
表3-7 APEX_AUTHENTICATION.SEND_LOGIN_USERNAME_COOKIEプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
ユーザーの名前。 |
|
ブラウザに |
例
次の例に、SEND_LOGIN_USERNAME_COOKIE
をコールして、アイテムの値P101_USERNAME
をログインCookieに保存する方法を示します。
apex_authentication.send_login_username_cookie ( p_username => :P101_USERNAME );