Microsoft Entra IDによるOpenID Connect認証でOracle APEXのアプリケーションを認証し、その際に発行されたアクセス・トークンを使用してOracle REST Data ServicesのREST APIを認証します。Oracle REST Data ServicesではJWTプロファイルを設定することにより、Entra IDが発行したアクセス・トークンで認証します。
Microsoft Azureのアカウントを作成すると利用できる、Microsoft Entra ID Freeを使用します。
検証作業に、以下のAPEXアプリケーションORDS JWT Testをインポートして使用します。
https://github.com/ujnak/apexapps/blob/master/exports/ords-jwt-test.zip上記のAPEXアプリケーションをインストールすると、サポートするオブジェクトとして、APEXアプリケーション以外にいくつかのオブジェクトが作成されます。
データベース・オブジェクトとして、ファンクションDUMP_SIGNON_RESPONSE、PARSE_JWT(23ai以上)、MLEモジュールMOD_CORE_JS、MOD_JWT_DECODE、MOD_PARSE_JWT(23ai以上)、MLE環境JWTENV(23ai以上)が作成されます。
RESTサービスとしてprintが作成されます。権限myordsappが作成され、作成されたRESTサービスprintは権限myordsappにより保護されます。
Web資格証明としてMicrosoft Entra ID JWT Testが作成されます。
APEXアプリケーションのインポートにより、APEX側で必要な作業のほとんどが実施されます。
以下より、Microsoft Entra IDにAPEXアプリケーションを登録する手順を説明します。
以下より、Microsoft Entra IDにAPEXアプリケーションを登録する手順を説明します。
Microsoft Entra IDのホーム画面を開きます。
サイド・メニューよりアプリの登録を開きます。
新規登録をクリックします。
Microsoft Entra IDに登録するアプリケーションの名前はORDS JWT Testとします。サポートされているアカウントの種類はこの組織ディレクトリのみに含まれるアカウント(既存のディレクトリのみ - シングル・テナント)を選んでいますが、これは契約に依存するかと思います。今回の作業は、Microsoft Entra ID Freeの範囲で実施しています。
アプリケーションのタイプとしてWebを選択し、リダイレクトURIは以下を指定します。
https://[ホスト名]/ords/apex_authentication.callback
以上を設定し、登録をクリックします。
アプリケーションが登録されます。
画面に表示されているアプリケーション(クライアント)IDは、APEXのWeb資格証明のクライアントIDの値になります。コピーして保存しておきます。
証明書またはシークレットの追加をクリックし、シークレットを作成します。
概要に戻り、エンドポイントを開きます。
APIの公開を開き、Scopeの追加をクリックします。
アプリケーションIDのURIの設定を求められます。この値はJWTのaud属性の値、つまりaudienceの値になります。
保存してから続けるをクリックします。
以上で、スコープの追加をクリックします。
スコープが追加されます。追加されたスコープ(api:で始まる値)をコピーして保存します。この値は、APEXアプリケーションの認証スキームの有効範囲に設定します。
Microsoft Entra IDでの作業は以上です。
APEXでの作業に移ります。
ワークスペース・ユーティリティのWeb資格証明を開きます。
APEXアプリケーションords-jwt-test.zipをインポートすると、Web資格証明としてMicrosoft Entra ID JWT Testが作成されます。
Microsoft Entra IDで作成したアプリケーションORDS JWT Testのアプリケーション(クライアント)IDおよびシークレットを設定し、変更を適用します。
認証スキームのMicrosoft Entra IDを開きます。
OpenID ConnectメタデータドキュメントのURLを設定の検出URLとして設定し、有効範囲(scope)にapi:で始まるスコープmyordsappを追加します。
以上で変更を適用します。
認証スキームMicrosoft Entra IDを再度開き、カレント・スキームにします。
以上で、APEXアプリケーションがMicrosoft Entra IDで認証されるようになりました。
APEXアプリケーションを実行すると、Microsoft Entra IDによるサインインが求められます。
構成に依存しますが、MFAのための通知の送信を行います。
Microsoft Authenticatorでの承認を求められます。
User InfoにAPEXアプリケーションが受け取ったアクセス・トークンの内容が表示されます。
この中のiss属性の値とaud属性の値をコピーします。
issはORDS_SECURITY.CREATE_JWT_PROFILEの引数p_issuerの値、audはp_audienceの値になります。
SQLワークショップのSQLコマンドより、ORDS_SECURITY.CREATE_JWT_PROFILEを実行します。
begin
ords_security.delete_jwt_profile;
ords_security.create_jwt_profile(
p_issuer => 'iss属性の値'
,p_audience => 'aud属性の値'
,p_jwk_url => 'jwks_uri属性の値'
);
end;
/
今度はJWTプロファイルが設定されたため、正常にREST APIのレスポンスが表示されます。
Microsoft Entra IDが発行したアクセス・トークンを使って、ORDSのREST APIを認証できることが確認できました。
完




























