我有一个向 Azure AD 租户中的 MS 图形进行身份验证的应用程序,并且我正在使用 MSAL 调用acquireTokenSilent
。有时,我的应用会收到一个 JWT 访问令牌,其中包含包含 mfa 的 amr 字段,具体如下:
amr: [
"pwd",
"rsa",
"mfa"
]
这导致成功的 OBO 代币交换。
有几次我的应用收到了 JWT 访问令牌,其中 amr 字段包含 wia:
amr: [
"wia"
]
并且尝试将此令牌交换为 OBO 令牌失败。
我尚未对应用的身份验证代码进行任何代码更改。是什么导致了acquireTokenSilent
行为的差异?
谢谢!
编辑
该应用程序是用TypeScript编写的带有ReactJS的SPA。我们要求用户在加载任何内容之前使用 AAD 登录,并且应用调用loginRedirect
componentDidMount
React 方法中的租户权限来实现此目的。
当用户发起对授权源(我们编写的中间层服务)的调用时,应用会调用 acquireTokenSilent 以获取具有中间层服务的配置 API 范围的令牌。然后,它会调用我们的中间层服务,并在标头中发送带有持有者前缀的令牌。该服务将令牌交换为 OBO 令牌。
我们在 Azure 门户中有一个 AAD 应用注册,该注册已将 API 权限委托给 AAD 图形用户.Read 和中间层服务的配置 API。
中间层服务接收令牌(我们从应用程序的acquireTokenSilent
调用中获得的令牌)并将其交换为 OBO 令牌,请求 MS Graph 和requested_token_use=on_behalf_of
的多个范围的权限。
当从 acquireTokenSilent 接收的 JWT 访问令牌具有包含wia
的amr
字段时,中间层服务上的令牌交换会收到有关需要 MFA 的条件访问声明质询的错误。
amr
是 JWT 中的身份验证方法引用声明。pwd
是指由服务(使用客户端密码)或用户进行的密码身份验证,wia
是 Windows 集成身份验证。
需要了解有关设置的更多信息,例如您正在使用什么平台、您的整体方案是什么,以及您如何设置客户端应用程序和进行获取令牌调用,以确定您在调用之间看到的差异。
可以在 OBO 上查看此 .NET 示例,并在此处查找有关 MSAL.NET 和 OBO 的详细信息。有关 OBO 流的更多信息。