ラベル 認証 の投稿を表示しています。 すべての投稿を表示
ラベル 認証 の投稿を表示しています。 すべての投稿を表示

2024年2月8日木曜日

APEXセッションごとにGoogle Service Accountによるアクセス・トークンを取得する

先日、Google Analytics 4のAnalytics Data APIを呼び出すサンプル・アプリケーションを作成しています。

APIを呼び出すために、あらかじめGoogleのサービスアカウントで生成したアクセス・トークンを、Web資格証明に保存しておくことが前提でした。APIの呼び出しテストであればこれでも動きますが、実用性はありません。

APEXのセッション毎にアクセス・トークンを取得するためには、APEXアプリケーションからGoogleのサービスアカウントの秘密キーにアクセスする必要があります。OCI VaultにGoogleのサービスアカウントの秘密キーをインポートして、その上で電子署名の生成を試したことがありますが、うまくできませんでした。

次善の策として、Googleのサービスアカウントに関する情報をJSON形式で保存して、APEXアプリケーションからは、OCI Vaultからシークレットを取り出してアクセス・トークンを取得するようにしてみました。

ホーム・ページにアクセス・トークンを取得するボタンを追加しています。


ボタンをクリックしたときに実行されるコードです。APEX_CREDENTIAL.SET_PERSISTENT_CREDENTIALSの代わりにAPEX_CREDENTIAL.SET_SESSION_CREDENTIALSを呼び出しています。



アプリケーション定義の置換文字列に、Analytics Data APIの認証に必要な情報を設定します。

G_SECRET_IDにOCI Vaultに保存されているシークレットのOCIDを設定します。

G_REGIONに使用しているOCI Vaultのリージョンを設定します。

G_OCI_CREDENTIALにOCI Vaultからシークレットのコンテンツを取り出す際に指定する、OCIのAPIのアクセスに使用するWeb資格証明を設定します。

G_GA4_CREDENTIAL_JWTに、サービス・アカウントの秘密キーを使って生成したJWTを保存するWeb資格証明を設定します。このWeb資格証明は、タイプがURL問合せ文字列で、あらかじめ作成済みである必要があります。

G_GA4_CREDENTIAL_TOKENに、生成したJWTで取得したアクセス・トークンを保存するWeb資格証明を設定します。このWeb資格証明は、タイプがHTTPヘッダーで、あらかじめ作成済みである必要があります。


APEXアプリケーションの認証後にアプリケーション・プロセスとしてアクセス・トークンの取得を実行したり、APEX_WEB_SERVICE.MAKE_REST_REQUESTの呼び出しで401 Unauthorizedのレスポンスを受けた時にアクセス・トークンの取得をやり直して、APIの呼び出しを再実行するようにすると、APEXアプリケーションの利用者はAPI認証について意識する必要がなくなるでしょう。

今回の記事は以上です。

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

完

2023年2月14日火曜日

REST対応SQLサービスのOAuth2による保護を確認する

 前回の記事で作成したアプリケーションを使って、REST対応SQLサービスのOAuth2による保護を確認します。

アプリケーションにページを追加し、OAuth2で保護したREST対応SQLサービスを呼び出し、動作を確認します。

REST対応SQLサービスのリクエストを許可するOAuth2クライアントを作成します。

OAuth2クライアントにロールSQL Developerを割り当てます。

以下のスクリプトを実行します。

作成したOAuth2クライアントrestsqluserのCLIENT_IDとCLIENT_SECRETを、ビューUSER_ORDS_CLIENTSから取得します。

select name, client_id, client_secret from user_ords_clients where name = 'restsqluser'


REST対応SQLサービスの呼び出しに使用する、Web資格証明を作成します。

ワークスペース・ユーティリティのWeb資格証明より、作業を行います、

名前はREST Enabled SQL Cred、静的識別子はREST_ENABLED_SQL_CREDとします。

認証タイプはOAuth2クライアント資格証明フロー、クライアントIDまたはユーザー名は列CLIENT_IDの値、クライアント・シークレットまたはパスワードは列CLIENT_SECRETの値を指定します。

作成をクリックします。


続いてREST対応SQLを作成します。

ワークスペース・ユーティリティを開きます。


REST対応SQLサービスを開きます。


作成をクリックします。


名前はRemote HR、エンドポイントURLはhttps://から始まりORDSスキーマ別名までの値です。

次へ進みます。


資格証明として、先ほど作成したREST Enabled SQL Credを選択します。ロールとしてSQL Developerが割り当たっているクライアントrestsqluserにて接続されます。

作成をクリックします。


ダイアログが閉じる前に接続確認が行われます。成功するとREST対応SQLサービスが作成されます。

ダイアログを閉じます。


REST対応SQLサービスが作成されました。


作成したREST対応SQLサービスを呼び出すページを作成します。

REST対応SQLサービスでは表の更新も可能なので、フォーム付きの対話モード・レポートを作成します。

ページの作成を開始します。

対話モード・レポートを選択します。

ページ定義では、フォーム・ページを含めるをONにします。

データ・ソースとしてREST対応SQLサービスを選択し、REST対応SQLサービスとしてRemote HRを選択します。ソース・タイプは表、表/ビューの名前としてEMPを選択します。

主キー列1はEMPNO (Number)です。

ページの作成をクリックします。

以上でページの追加は完成です。

ページを実行すると記事の先頭のGIF動画のように動作します。ローカル・データベースの表EMPの操作と、見かけ上の違いはありません。

ページを追加したアプリケーションのエクスポートを以下に置きました。
https://github.com/ujnak/apexapps/blob/master/exports/ords-rest-test2.zip

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

完