APIを呼び出すために、あらかじめGoogleのサービスアカウントで生成したアクセス・トークンを、Web資格証明に保存しておくことが前提でした。APIの呼び出しテストであればこれでも動きますが、実用性はありません。
APEXのセッション毎にアクセス・トークンを取得するためには、APEXアプリケーションからGoogleのサービスアカウントの秘密キーにアクセスする必要があります。OCI VaultにGoogleのサービスアカウントの秘密キーをインポートして、その上で電子署名の生成を試したことがありますが、うまくできませんでした。
次善の策として、Googleのサービスアカウントに関する情報をJSON形式で保存して、APEXアプリケーションからは、OCI Vaultからシークレットを取り出してアクセス・トークンを取得するようにしてみました。
ホーム・ページにアクセス・トークンを取得するボタンを追加しています。
アプリケーション定義の置換文字列に、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のアプリケーション作成の参考になれば幸いです。
完