我有一个应用程序正在对 Azure AD 租户中的 MS Graph 进行身份验证,并且我正在使用 MSAL 来调用acquireTokenSilent
. 有时我的应用会收到一个 JWT 访问令牌,其中 amr 字段包含 mfa,具体来说:
amr: [
"pwd",
"rsa",
"mfa"
]
这导致成功的 OBO 代币交换。
有几次我的应用程序收到了一个 JWT 访问令牌,其中 amr 字段包含 wia:
amr: [
"wia"
]
并尝试将此令牌交换为 OBO 令牌失败。
我没有在我的应用程序中对身份验证代码进行任何代码更改。导致acquireTokenSilent
行为差异的原因是什么?
谢谢!
编辑
该应用程序是一个使用 TypeScript 和 ReactJS 编写的 SPA。我们要求用户在加载任何内容之前使用 AAD 登录,并且应用程序loginRedirect
在 React 方法中调用我们的租户权限componentDidMount
来实现这一点。
当用户发起对授权源(我们编写的中间层服务)的调用时,应用程序调用acquireTokenSilent 以获取具有中间层服务配置API 范围的令牌。然后它调用我们的中间层服务并在标头中发送带有 Bearer 前缀的令牌。该服务将令牌交换为 OBO 令牌。
我们在 Azure 门户中有一个 AAD 应用注册,它已将 API 权限委派给 AAD Graph User.Read 和我们的中间层服务的配置 API。
中间层服务接收令牌(我们从应用程序acquireTokenSilent
调用中获得)并将其交换为 OBO 令牌,请求 MS Graph 和requested_token_use=on_behalf_of
.
当从 acquireTokenSilent 接收到的 JWT 访问令牌具有amr
包含 的字段wia
时,中间层服务上的令牌交换会收到有关需要 MFA 的条件访问声明质询的错误。