21.4.10 プロシージャを使用した実行時の認証の構成

セキュリティ・ページでプロシージャを指定して、実行時に認証を構成します。

プロシージャを指定して実行時に認証を構成するには:

  1. ワークスペースのホームページで、「アプリケーション・ビルダー」アイコンをクリックします。
  2. アプリケーションを選択します。
    アプリケーションのホームページが表示されます。
  3. アプリケーションのホームページから、セキュリティ・ページに、次の2通りの方法でアクセスできます。
    • 「アプリケーション定義の編集」ボタン:
      1. アプリケーション名の右側にある「アプリケーション定義の編集」をクリックします。

      2. 「セキュリティ」タブをクリックします。

    • 「共有コンポーネント」からの場合:
      1. 「共有コンポーネント」をクリックします。

      2. 「セキュリティ」で、「セキュリティ属性」をクリックします。

    セキュリティ属性の編集ページが表示されます。

  4. 「認証」、「構成プロシージャ」 - 実行時に認証を構成する手順の名前を入力します。後続の例を参照してください。

    認証構成プロシージャを使用するアプリケーションでは、URL ( f?p=100:1:1234:APEX_AUTHENTICATION=myauthなど)を使用して認証スキームを変更することはできません。

    認証構成プロシージャは、最初のリクエストでセッションごとに少なくとも1回実行されます。ただし、Oracle APEXは、別の場合にもコールする必要がある場合があります。このような場合は、コールごとに同じ値を設定する必要があります。

  5. 「変更の適用」をクリックして、変更を保存します。

例21-1 プロシージャmy_auth_config

この例は、マルチテナンシを実装し、テナントに対して様々なソーシャル・サインインをサポートするアプリケーション用です。この例では、URLのドメイン名を使用して構成データをフェッチします(たとえばhttps://cust-01.example.comhttps://cust-02.example.comなど)。

procedure my_auth_config (
    p_conf in out nocopy apex_authentication.t_configuration )
is
    l_host varchar2(32767) := sys.owa_util.get_cgi_env('HTTP_HOST');
begin
    for i in ( select discovery_url,
                      auth_scheme_name,
                      credential,
                      tenant_id
                 from customer_tenants
                where hostname = l_host )
    loop
        p_conf.authentication_name := i.auth_scheme_name;
        p_conf.substitutions := apex_t_varchar2 (
                                    'DISCOVERY_URL'       , i.discovery_url,
                                    'CREDENTIAL_STATIC_ID', i.credential );
        p_conf.tenant_id := i.tenant_id;
    end loop;
end my_auth_config;

このプロシージャは、in/outパラメータp_confの3つの属性を変更できます。これらはすべてオプションです。

  • authentication_name - アプリケーションで認証スキームの名前を割り当てます。これはデフォルト・スキームのかわりに使用されます。そのスキームに対して「セッションの切替え」を有効にする必要があることに注意してください。
  • substitutions - apex_t_varchar2を使用して名前と値のペアを割り当てます。Oracle APEXは、認証スキーム属性の各#NAME#を、関連付けられた値に置き換えます。組込みソーシャル・サインイン・スキームでは、スキームに構成された資格証明ストアではなく、CREDENTIAL_STATIC_IDを使用して対応する資格証明ストアを使用します。
  • tenant_id - セッションでこのテナントIDを設定します(APEX_SESSION.SET_TENANT_IDを参照)。

ノート:

Oracle APEX APIリファレンスSET_TENANT_IDプロシージャ