Azure AD テナントで MS Graph に対して認証を行うアプリがあり、MSAL を使用して を呼び出していますacquireTokenSilent
。私のアプリは、mfa を含む amr フィールドを持つ JWT アクセス トークンを受け取ることがあります。具体的には次のとおりです。
amr: [
"pwd",
"rsa",
"mfa"
]
これにより、OBO トークン交換が成功します。
私のアプリは、wia を含む amr フィールドを持つ JWT アクセス トークンを数回受け取りました。
amr: [
"wia"
]
このトークンを OBO トークンに交換しようとすると失敗します。
アプリの認証コードにコード変更を加えていません。acquireTokenSilent
行動の違いの原因は何ですか?
ありがとう!
編集
このアプリは、ReactJS を使用して TypeScript で記述された SPA です。ユーザーはコンテンツをロードする前に AAD でログインする必要があり、アプリはこれを実現するために React メソッドloginRedirect
でテナント オーソリティを呼び出します。componentDidMount
ユーザーが承認済みソース (作成した中間層サービス) への呼び出しを開始すると、アプリは acquireTokenSilent を呼び出して、中間層サービスの構成 API のスコープを持つトークンを取得します。次に、中間層サービスを呼び出し、Bearer プレフィックス付きのヘッダーでトークンを送信します。そのサービスは、トークンを OBO トークンと交換します。
Azure portal に AAD アプリの登録があり、AAD Graph User.Read と中間層サービスの構成 API に API アクセス許可が委任されています。
中間層サービスは (アプリのacquireTokenSilent
呼び出しから取得した) トークンを受け取り、それを OBO トークンと交換して、MS Graph とrequested_token_use=on_behalf_of
.
acquireTokenSilent から受信した JWT アクセス トークンに をamr
含むフィールドがwia
ある場合、中間層サービスのトークン交換で、MFA を必要とする条件付きアクセス クレーム チャレンジに関するエラーが発生します。