3

我有一个应用程序正在对 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 的条件访问声明质询的错误。

4

1 回答 1

3

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

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

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

于 2019-07-15T20:12:22.327 回答