2022年4月14日木曜日

Oracle APEXが使用するクッキーについて

 Oracle APEXのリリース・ノートに、プライバシーに関する告知(Privacy Notice)について記載があります。

リリース・ノートの以下のセクションです。

11.1 Privacy Notice

Oracle APEX 21.2のリリース・ノートの日本語訳にて、該当する部分は以下になります。

11.1 プライバシに関する通知

その中にCookieおよび関連テクノロジのセクションがあり、Oracle APEXが使用しているクッキーについて説明されています。

しかし、説明が短くて、いまひとつ分かりません。

少し、内容を確認してみました。


セッションCookie



ORA_WWV_USER_instance_id


Oracle APEXが提供している管理ツール開発ツール、例えばアプリケーション・ビルダーSQLワークショップなどもOracle APEXのアプリケーションです。ユーザーが作成したAPEXアプリケーションと同様に、セッション管理にクッキーが使用されています。

このクッキーは、アプリケーションのセキュリティ・クッキーと同じ機能を持つものです。対象が開発ツールであり、管理者による変更はできません。Oracle APEXの管理者やアプリケーションの開発者として環境にアクセスしない限り、このクッキーがブラウザに送信されることはありません。


ORA_WWV_APP_application_id, ORA_WWV_APP_workspace_cookie_id, custom_name


これらのクッキーは、APEXアプリケーションの認証スキームセッション共有にて定義されています。


タイプによって、クッキーの名前が変わります。
  • アプリケーション(非共有) - ORA_WWV_APP_application_id
  • ワークスペース共有 - ORA_WWV_APP_workspace_cookie_id
  • カスタム - custom_name
カスタムを選択すると、Cookie名CookieパスCookieドメインセキュアを個別に設定することができます。


APEXアプリケーションのセッションの維持に使用されるクッキーであるため、このクッキーは必須クッキーになります


ORA_WWV_RAC_INSTANCE


APEXが動作しているデータベース・インスタンスがReal Application Clustersにて構成されている場合、リクエストが処理されたインスタンスIDが設定されます。

無くてもリクエストの処理はできるので、必須クッキーではありません。また、後続のリクエストが前回と同じインスタンスで実行されるかどうかは、中間層(ロード・バランサやORDS)の構成にも依存します。


永続Cookie



ORA_WWV_REMEMBER_LANG

APEXの管理サービスやワークスペースにサインインする際に、言語選択を行うことにより設定されるクッキーです。


このクッキーが設定されていると、APEXの管理サービスやワークスペースにサインインする際に、前回選択した言語でサインイン画面が開きます。

管理サービスや開発ツール以外では使用されていません。


ORA_WWV_REMEMBER_UN


開発者としてワークスペースにサインインする際に、ワークスペースとユーザー名を記憶にチェックを入れると生成されるクッキーです。



LOGIN_USERNAME_COOKIE


標準で生成されるAPEXアプリケーションのサインイン画面にて、ユーザー名を記憶にチェックを入れると生成されるクッキーです。


ただし、標準のサインイン画面は、開発者によってカスタマイズできます。

ページ・デザイナで開いて、サインインのページの実装を確認します。

レンダリング前にプロセスCookieのユーザー名を取得が実行され、クッキーからユーザー名を取り出し、ページ・アイテムに設定しています。APEX_AUTHENTICATION.GET_LOGIN_USERNAME_COOKIEを呼び出しています。

:P9999_USERNAME := apex_authentication.get_login_username_cookie;
:P9999_REMEMBER := case when :P9999_USERNAME is not null then 'Y' end;


サインインをクリックすると、プロセスCookieのユーザー名を設定が実行され、クッキーにユーザー名を設定しています。APEX_AUTHENTICATION.SEND_LOGIN_USERNAME_COOKIEを呼び出しています。

apex_authentication.send_login_username_cookie (
    p_username => lower(:P9999_USERNAME),
    p_consent  => :P9999_REMEMBER = 'Y' );


チェックボックスユーザー名を記憶は、APEX_AUTHENTICATIION.PERSISTENT_COOKIES_ENABLEDがTRUEを返すときのみ表示されるよう、サーバー側の条件が設定されています。


APEX_AUTHENTICATION.GET_LOGIN_USERNAME_COOKIEおよびSEND_LOGIN_USERNAME_COOKIEともに、引数p_cookie_nameを指定せず、デフォルト値のC_DEFAULT_USERNAME_COOKIEを使っています。

この定数C_DEFAULT_USERNAME_COOKIEの値が、LOGIN_USERNAME_COOKIEになります。

アプリケーション開発者は、引数p_cookie_nameに独自にクッキー名を指定することで、LOGIN_USERNAME_COOKIEという名称を変更することができます。

永続Cookieは、管理サービスインスタンスの設定によって、すべて無効にすることができます。

インスタンス管理セキュリティのセクションに、ワークスペースCookieの設定という項目があります。これをいいえに変更します。


永続Cookieなので、この設定をいいえに変更しても、既にブラウザに記憶されているクッキーは残ります。そのため、これらのクッキーを手動でブラウザから削除する必要があります。

以上で、Oracle APEXが使用するクッキーについての補足説明は終了です。