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プロシージャのパラメータ
パラメータ | 説明 |
---|---|
p_session_id |
Application Expressのセッション識別子。 |
p_app_id |
データベースのアプリケーション識別子。 |
p_ajax_identifierp |
システム生成のAJAX識別子。「GET_AJAX_IDENTIFIER Function」を参照してください。 |
p_x01からp_x10 |
外部ログインが認証プラグインに渡すオプション・パラメータ。 |
例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 Procedure」の例を参照してください。
このファンクションでは、デフォルトのログイン・ページからユーザー名を含んだ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ファンクションのパラメータ
パラメータ | 説明 |
---|---|
p_cookie_name |
ブラウザにユーザー名を格納するCookie名。 |
例
この例では、ページ・アイテムP101_USERNAME
にユーザー名Cookie値を保存するためにGET_LOGIN_USERNAME_COOKIE
が使用されます。
: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が返されます)。
result=trueの場合、認証後のプロシージャを実行します。
result=trueの場合、セッション表にユーザー名を保存します。
result=trueの場合、ディープ・リンク用のリダイレクトURLを設定します。
result=falseの場合、エラー・メッセージをnotification_msgパラメータに設定したリダイレクトURLを現行ページに設定します。
認証結果を記録します。
リダイレクトします。
構文
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プロシージャのパラメータ
パラメータ | 説明 |
---|---|
p_username |
ユーザーの名前。 |
p_password |
ユーザーのパスワード。 |
p_uppercase_username |
|
例
この例では、ユーザーの資格証明、ユーザー名およびパスワードが認証スキームに渡されます。
apex_authentication.login('JOE USER', 'mysecret');
このプロシージャは、セッションをクローズし、アプリケーションのホーム・ページにリダイレクトします。このプロシージャのコールは、ブラウザから直接行います。
構文
APEX_AUTHECNTICTATION.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プロシージャのパラメータ
パラメータ | 説明 |
---|---|
p_session_id |
クローズするセッションのApplication Expressのセッション識別子。 |
p_app_id |
データベース・アプリケーション識別子。 |
p_ws_app_id |
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プロシージャのパラメータ
パラメータ | 説明 |
---|---|
p_username |
ユーザーの名前。 |
p_password |
ユーザーのパスワード。 |
p_uppercase_username |
|
例
このプロシージャ・コールでは、ユーザー資格証明、ユーザー名およびパスワードを認証スキームに渡してユーザーの認証を終了します。
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プロシージャのパラメータ
パラメータ | 説明 |
---|---|
p_username |
ユーザーの名前。 |
p_cookie_name |
ブラウザに |
例
この例では、ログインCookieにアイテムP101_USERNAME
の値を保存するためのSEND_LOGIN_USERNAME_COOKIE
のコール方法を示します。
apex_authentication.send_login_username_cookie ( p_username => :P101_USERNAME );