2024年12月17日火曜日

ORDS 24.4で追加されたパッケージORDS_PARを使って事前承認リクエストを生成する

ORDS 24.4よりパッケージORDS_PARが提供されています。ORDS_PARのファンクションDEFINE_FOR_HANDLERを呼び出して、事前承認リクエスト(Pre-Authenticated Request - PAR)を作成することができます。また、REVOKE_PARを呼び出して、発行済みの事前承認リクエストを無効化できます。

パッケージORDS_PARのリファレンスはこちらになります。

簡単なAPEXアプリケーションを作成し、動作を確認してみました。REVOKE_PARの呼び出しについてはリファレンスに記載されているように、呼び出した後にすぐPARが無効化されるわけではないようです。
REVOKE_PAR function revokes an existing PAR in the current schema. It may take up to 30 seconds for the changes to take effect.

以下よりPARの確認作業について紹介します。

最初に作成したPARを保存する表を作成します。おそらくセキュリティ上の配慮と思われますが、過去に生成されたPARを確認する方法がありません。そのため、生成したPARを記録する必要がある場合は、個別に実装が必要です。今回は生成したPARを保存する表として、表EBAJ_PAR_URLSを作成します。

以下のクイックSQLのモデルから、表EBAJ_PAR_URLSを作成します。
# prefix: ebaj
par_urls /auditcols
    token vc400 /nn
    alias vc400 /nn
    uri   vc400 /nn
    duration num /nn
    is_revoked vc1
クイックSQLからレビューおよび実行を行い、表EBAJ_PAR_URLSを作成します。


SQLワークショップRESTfulサービスを開き、事前承認リクエストを生成する対象にするRESTサービスを作成します。


ORDSにスキーマを登録します。


ORDSスキーマ属性RESTfulアクセスの有効化オンにします。今回の確認作業にサンプル・サービスを使用するので、サンプル・サービスのインストールオンにします。

スキーマ属性の保存をクリックします。


スキーマがREST有効化されます。

左ペインにモジュールとしてoracle.example.hrが現れます。これはサンプルとしてインストールされたモジュールで、後ほどこのモジュール名を指定してPARを生成します。

パッケージORDS_PARが利用できるのはORDS 24.4以降です。ORDSバージョン24.4以降であることを、画面上の表示から確認します。


今回は、URIテンプレート(DEFINE_FOR_HANDLERの引数としてはp_pattern)がemployees/、メソッド(DEFINE_FOR_HANDLERの引数としてはp_method)がGETのRESTサービスをPARの作成対象とします。

完全なURLをコピーし、ブラウザからアクセスします。


JSONドキュメントとして、表EMPの内容を取得できます。今のところRESTサービスは保護されていません。


RESTサービスを保護します。

左ペインの権限を選択し、右ペインに開いた権限の一覧より権限の作成をクリックします。


作成する権限の名前タイトルoracle.example.hrとし、保護されたモジュールとしてoracle.example.hrを選択します。ユーザー認証によるアクセスは許可しないので、ロールは割り当てません。

以上で、権限の作成をクリックします。


左ペインの権限に、新たに追加されたoracle.example.hrが現れます。これでモジュールoracle.example.hrが(あらゆるリクエストから)保護されました。


先ほど確認した完全なURLでアクセスすると、Unauthorizedが返されます。


PARの作成を行なうAPEXアプリケーションを作成します。

名前Sample PAR requestsとします。空のアプリケーションを作成し、確認に使う機能はホーム・ページに実装します。


ページ・アイテムP1_URLに、プロトコル名で始まる完全なPAR URLを保存します。完全なPAR URLは、ボタンGENERATE_PARをクリックして実行されるプロセスで生成します。


ページ・アイテムP1_TOKENにDEFINE_FOR_HANDLERを呼び出したときに生成されるトークンの値を保持します。このページ・アイテムに設定されているトークンを、ボタンREVOKE_PARをクリックしたときに実行されるREVOKE_PARの引数として与えます。


ページ・アイテムP1_DURATIONには、PARの有効期間をで指定します。


表EBAJ_PAR_URLSを表示する対話モード・レポートを作成します。ソース表名としてEBAJ_PAR_URLSを指定します。


ボタンGENERATE_PARをクリックしたときに実行されるプロセスを作成します。ソースPL/SQLコードとして、PARを生成するコードを記述します。



ボタンREVOKE_PARをクリックしたときに実行されるプロセスを作成します。ソースPL/SQLコードして、PARを無効化するコードを記述します。



以上でアプリケーションは完成です。

今回作成したAPEXアプリケーションのエクスポートを以下に置きました。
https://github.com/ujnak/apexapps/blob/master/exports/sample-ords-par-requests.zip

Oracle APEXのアプリケーション作成の参考になれば幸いです。