パッケージ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アクセスの有効化をオンにします。今回の確認作業にサンプル・サービスを使用するので、サンプル・サービスのインストールをオンにします。
スキーマ属性の保存をクリックします。
左ペインにモジュールとして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が返されます。
名前はSample PAR requestsとします。空のアプリケーションを作成し、確認に使う機能はホーム・ページに実装します。
ページ・アイテムP1_TOKENにDEFINE_FOR_HANDLERを呼び出したときに生成されるトークンの値を保持します。このページ・アイテムに設定されているトークンを、ボタンREVOKE_PARをクリックしたときに実行されるREVOKE_PARの引数として与えます。
ページ・アイテムP1_URLに、プロトコル名で始まる完全なPAR URLを保存します。完全なPAR URLは、ボタンGENERATE_PARをクリックして実行されるプロセスで生成します。
ページ・アイテムP1_DURATIONには、PARの有効期間を秒で指定します。
表EBAJ_PAR_URLSを表示する対話モード・レポートを作成します。ソースの表名としてEBAJ_PAR_URLSを指定します。
ボタンGENERATE_PARをクリックしたときに実行されるプロセスを作成します。ソースのPL/SQLコードとして、PARを生成するコードを記述します。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
declare | |
l_url varchar2(800); | |
l_base_url varchar2(400); | |
l_par varchar2(32767); | |
l_par_object json_object_t; | |
l_token ebaj_par_urls.token%type; | |
l_alias ebaj_par_urls.alias%type; | |
l_uri ebaj_par_urls.uri%type; | |
l_duration ebaj_par_urls.duration%type; | |
begin | |
l_duration := :P1_DURATION; | |
l_base_url := apex_util.host_url('APEX_PATH'); | |
l_par := ords_par.define_for_handler( | |
p_module_name => 'oracle.example.hr' | |
,p_pattern => 'employees/' | |
,p_method => 'GET' | |
,p_duration => l_duration | |
); | |
l_par_object := json_object_t(l_par); | |
l_token := l_par_object.get_string('token'); | |
l_alias := l_par_object.get_string('alias'); | |
l_uri := l_par_object.get_string('uri'); | |
l_url := l_base_url || l_uri; | |
:P1_TOKEN := l_token; | |
:P1_URL := l_url; | |
insert into ebaj_par_urls(token, alias, uri, duration) | |
values(l_token, l_alias, l_uri, l_duration); | |
end; |
ボタンREVOKE_PARをクリックしたときに実行されるプロセスを作成します。ソースのPL/SQLコードして、PARを無効化するコードを記述します。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
declare | |
l_token ebaj_par_urls.token%type; | |
begin | |
l_token := :P1_TOKEN; | |
ords_par.revoke_par( | |
p_par_token => l_token | |
); | |
update ebaj_par_urls set is_revoked = 'Y' where token = l_token; | |
end; |
以上でアプリケーションは完成です。
今回作成したAPEXアプリケーションのエクスポートを以下に置きました。
https://github.com/ujnak/apexapps/blob/master/exports/sample-ords-par-requests.zip
Oracle APEXのアプリケーション作成の参考になれば幸いです。
完