为什么 MSAL 返回的 JWT 令牌的 amr 字段有时具有 wia 或 mfa?



我有一个向 Azure AD 租户中的 MS 图形进行身份验证的应用程序,并且我正在使用 MSAL 调用acquireTokenSilent。有时,我的应用会收到一个 JWT 访问令牌,其中包含包含 mfa 的 amr 字段,具体如下:

amr: [
"pwd",
"rsa",
"mfa"
]

这导致成功的 OBO 代币交换。

有几次我的应用收到了 JWT 访问令牌,其中 amr 字段包含 wia:

amr: [
"wia"
]

并且尝试将此令牌交换为 OBO 令牌失败。

我尚未对应用的身份验证代码进行任何代码更改。是什么导致了acquireTokenSilent行为的差异?

谢谢!

编辑

该应用程序是用TypeScript编写的带有ReactJS的SPA。我们要求用户在加载任何内容之前使用 AAD 登录,并且应用调用loginRedirectcomponentDidMountReact 方法中的租户权限来实现此目的。

当用户发起对授权源(我们编写的中间层服务)的调用时,应用会调用 acquireTokenSilent 以获取具有中间层服务的配置 API 范围的令牌。然后,它会调用我们的中间层服务,并在标头中发送带有持有者前缀的令牌。该服务将令牌交换为 OBO 令牌。

我们在 Azure 门户中有一个 AAD 应用注册,该注册已将 API 权限委托给 AAD 图形用户.Read 和中间层服务的配置 API。

中间层服务接收令牌(我们从应用程序的acquireTokenSilent调用中获得的令牌)并将其交换为 OBO 令牌,请求 MS Graph 和requested_token_use=on_behalf_of的多个范围的权限。

当从 acquireTokenSilent 接收的 JWT 访问令牌具有包含wiaamr字段时,中间层服务上的令牌交换会收到有关需要 MFA 的条件访问声明质询的错误。

amr是 JWT 中的身份验证方法引用声明。pwd是指由服务(使用客户端密码)或用户进行的密码身份验证,wia是 Windows 集成身份验证。

需要了解有关设置的更多信息,例如您正在使用什么平台、您的整体方案是什么,以及您如何设置客户端应用程序和进行获取令牌调用,以确定您在调用之间看到的差异。

可以在 OBO 上查看此 .NET 示例,并在此处查找有关 MSAL.NET 和 OBO 的详细信息。有关 OBO 流的更多信息。

最新更新