2024年1月30日火曜日

Microsoft Entra IDのトークンURLを直接呼び出してアクセス・トークンを取得する

Microsoft Entra IDで保護されたリソースの場合、APEX_WEB_SERVICE.MAKE_REST_REQUSTの引数p_token_urlにEntra IDのトークンURLを指定することで、APIの認証を行うことができます。

アクセス・トークンを発行する手順は、Microsoftの次のドキュメント「最初のケース:共有シークレットを使ったアクセス トークン要求」で説明されています。

AzureのAPIをAPEX_WEB_SERVICE.MAKE_REST_REQUSTで呼び出したときに、HTTPステータス・コード 401 Unauthorizedが返されると、APIの認証に関わる値のどれが間違っているのか、APEX_WEB_SERVICE.MAKE_REST_REQUSTのエラーから確認するのは困難です。

そのため、以下のPL/SQLコードでトークンURLを直接呼び出し、アクセス・トークンを取得してみます。

テナントIDアプリケーション(クライアントID)スコープクライアント・シークレットのどれに間違いがあるのか、トークンURLが返すレスポンスから確認できます。


トークンURLが返してきたレスポンスから、Microsoft Entra IDでアクセス・トークンを要求する場合、scopeに指定できる値(Resource App ID)はひとつだけという制限があり、それに違反していることがわかりました。

認証関連のエラーはデバッグが面倒なので、それを少し助ける方法を紹介しました。

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