【问题标题】:What's the main reason of AADSTS90009?AADSTS90009 的主要原因是什么?
【发布时间】:2017-07-03 05:41:36
【问题描述】:

在这篇文章中,

AAD token: Why aud sometimes shows app id, sometimes it's the app url?

我了解了为什么 AAD 令牌中的 aud 字段有时是应用程序 ID,有时是应用程序 url。它们似乎取决于您在请求令牌时作为资源放置的内容。

但是,当我尝试使用应用程序 url(SPA 网站的 AAD 应用程序 url)为 SPA 网站请求 AAD 令牌时,它返回 AAD 错误 - AADSTS90009。

AADSTS90009:应用程序 '' 正在为自己请求令牌。仅当使用基于 GUID 的应用标识符指定资源时才支持此方案。

相关讨论请参阅此帖子。

OAuth 2.0 and Azure Active Directory - error AADSTS90009

我很好奇,这个错误背后的主要原因是什么?

为什么不支持app url作为资源标识?

【问题讨论】:

  • 为自己请求访问令牌是没有意义的。通常,您会希望为某些 API 应用程序请求令牌。
  • 我不同意。对于需要用户身份的网站,您需要来自 AAD 的令牌来代表用户。不需要调用其他API。如果没有意义,为什么你仍然可以通过将app url替换为app id来获得令牌?
  • 这是一个 id 令牌。您可以通过启用隐式授权流来实现这一点。但是,如果您想以这种方式获取它,则只需指定资源的客户端 ID 而不是应用程序 ID URI :)
  • 谢谢,我会详细了解 id token 和 access token 的区别。但是我用 adal.js 为我的门户获得的令牌,两者都有。顺便说一句,我想知道为什么在这种情况下可以使用客户端 id 而不是 app id uri?它们都应该是 AAD 应用程序的标识。
  • 老实说,我不知道为什么需要您使用客户端 ID 而不是 URI:/

标签: azure-active-directory adal


【解决方案1】:

如果您正在利用 AAD,并且您获得了一个令牌,其中 aud 声明包含:

  • 一个 Uri - 这意味着您正在处理 access_token 和 Uri 表示您的客户端应用程序想要访问的资源应用程序的服务主体名称(读作“唯一标识符”)。
  • Guid - 这意味着您正在处理 id_token 并且该值对应于获取令牌的应用程序的 ObjectId。

【讨论】:

  • 我必须扩展我的答案:如果您的资源应用程序是 Microsoft 第一方应用程序,那么即使是 access_token,“aud”声明的值也可能是一个 Guid,但如果您正在处理常规应用程序,那么一个 Guid无法为应用的 IdentifierUri 设置。但常规应用程序不一定会有 Uri - 如果使用 Azure Portal,则无法设置非 Uri 值,但可以通过 Azure AD PowerShell cmdlet 设置。
猜你喜欢
  • 2012-05-29
  • 2011-06-23
  • 2014-12-24
  • 2012-10-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-10
  • 2012-11-10
相关资源
最近更新 更多