ヘッダーをスキップ
Oracle® Application Express APIリファレンス
リリース4.2 for Oracle Database 12c
B71340-03
  目次へ移動
目次
索引へ移動
索引

前
 
次
 

3 APEX_AUTHENTICATION

APEX_AUTHENTICATIONパッケージには、認証プラグインのための公開APIが用意されています。

トピック:

定数

このパッケージでは、次の定数が使用されます。

c_default_username_cookie constant varchar2(30) := 'LOGIN_USERNAME_COOKIE';

CALLBACKプロシージャ

このプロシージャは、外部ログイン・ページのランディング・リソースです。このプロシージャのコールは、ブラウザから直接行います。

構文

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ファンクション」を参照してください。

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; 

GET_CALLBACK_URLファンクション

このファンクションは、外部ログイン・ページのランディング・リクエストとして使用される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ファンクションのパラメータ

パラメータ 説明

p_x01からp_x10

外部ログインによって認証プラグインに渡されるオプション・パラメータ。


「CALLBACKプロシージャ」の例を参照してください。

GET_LOGIN_USERNAME_COOKIEファンクション

このファンクションは、デフォルトのログイン・ページから、ユーザー名に使用される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名。


この例では、GET_LOGIN_USERNAME_COOKIEによって、ユーザー名のCookieの値をページ・アイテムP101_USERNAMEに保存します。

:P101_USERNAME := apex_authentication.get_login_username_cookie;

IS_AUTHENTICATEDファンクション

このファンクションは、セッションでユーザーが認証されているかどうかをチェックし、ユーザーがログイン済である場合は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; 

IS_PUBLIC_USERファンクション

このファンクションは、ユーザーがセッションで承認されていないかどうかをチェックします。ユーザーがログイン済である場合は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; 

LOGINプロシージャ

このプロシージャは、カレント・セッションのユーザーを認証します。

ログイン・プロセスの手順は、次のとおりです。

  1. 認証スキームの認証前プロシージャを実行します。

  2. 認証スキームの認証ファンクションを実行して、ユーザー資格証明(p_username、p_password)をチェックし、成功した場合はTRUEを戻します。

  3. 結果がTRUEの場合は、認証後の処理を実行します。

  4. 結果がTRUEの場合は、セッション表にユーザー名を保存します。

  5. 結果がTRUEの場合は、ディープ・リンクにリダイレクトURLを設定します。

  6. 結果がFALSEの場合は、カレント・ページにリダイレクトURLを設定し、notification_msgパラメータにエラー・メッセージを含めます。

  7. 認証結果を記録します。

  8. リダイレクトします。

構文

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

TRUEの場合、p_usernameは大文字に変換されます。


この例では、認証スキームにユーザー資格証明、ユーザー名およびパスワードを渡します。

apex_authentication.login('JOE USER', 'mysecret');

LOGOUTプロシージャ

このプロシージャは、セッションを終了し、アプリケーションのホームページにリダイレクトします。このプロシージャのコールは、ブラウザから直接行います。

構文

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プロシージャのパラメータ

パラメータ 説明

p_session_id

終了するセッションのApplication Expressセッション識別子。

p_app_id

データベース・アプリケーション識別子。

p_ws_app_id

Webシート・アプリケーション識別子。


この例では、セッションの終了を記録します。

apex_authentication.logout(:SESSION, :APP_ID);

POST_LOGINプロシージャ

このプロシージャは、カレント・セッションのユーザーを認証します。これによって、手順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

TRUEの場合、p_usernameは大文字に変換されます。


このプロシージャ・コールは、認証スキームにユーザー資格証明、ユーザー名およびパスワードを渡し、ユーザーの認証を完了します。

apex_authentication.post_login('JOE USER', 'mysecret');

SEND_LOGIN_USERNAME_COOKIEプロシージャ

このプロシージャは、ユーザー名に使用される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

ブラウザにp_usernameを保存するためのCookie名。


次の例に、SEND_LOGIN_USERNAME_COOKIEをコールして、アイテムの値P101_USERNAMEをログインCookieに保存する方法を示します。

apex_authentication.send_login_username_cookie (
    p_username => :P101_USERNAME );