AAD 令牌:为什么 aud 有时显示应用程序 ID,有时是应用程序 url?

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

我正在为我的网站使用 adal.js 进行 AAD 身份验证。 解码AAD令牌后,aud看起来不一样了,它是AAD中的应用程序api。 但是,当我尝试了解 AAD 在不同情况下的工作方式时,几乎所有 AAD 令牌文档示例都将 aud 显示为资源 url,如 http://contoso.com/.

根据我的理解,aud 表示此令牌是为颁发的。它实际上应该是什么没有限制。

但我很好奇 AAD 的 aud 行为不一致的主要原因是什么。

为什么有时候可以是app id,有时候可以是url? 为什么不一直使用应用程序 ID 或一直使用 url?

有人可以帮忙分享一些想法吗?

谢谢。

令牌中的 "AUD" 值应与令牌请求中的 "Resource" 值匹配。如果您请求令牌并将资源指定为 App ID,那么您将获得带有 GUID 的 AUD 值。否则,如果您使用 App ID URI,您将获得 URL。

作为资源开发者,重要的是您对 API 进行编程,以便您接受两种形式的令牌,因为它们都应该有效才能访问您的资源。我相信 OWIN 已经为您解决了这个问题。

如果有帮助请告诉我!

ADAL.JS 处理 2 种类型的标记:id_token and access_token。 id_token 表示已在您的应用程序中登录的用户的身份。非常粗略地说,它只包含两部分——提供凭据的用户 ID 和获取令牌的应用程序的 ID。在 id_token 的情况下,aud 的值为 Guid,对应于获取令牌的应用程序的 AppId。从 OAUTH v2 的角度来看,这是包含用户想要访问的资源的同一个应用程序。

说到access_token - 它不仅代表了上面提到的那些2,即用户和获取应用程序,而且还代表了具有用户打算访问的一组资源的应用程序。在大多数情况下,由 aud 声明表示的第二个应用程序将是一个 Uri,它表示服务主体名称(或 App ID Uri 或 IdentifierUri)——所有这些都是同义词。此值是一种从客户端 AAD 应用程序指向服务器 AAD 应用程序的方法 - 包含受保护资源的应用程序。

因此,ADAL.JS 首先请求用户的凭据并获取 id_token,然后它向 AAD 端点发送额外的请求以获取 access_token。如果您查看这两个标记,您将在 aud 声明中看到不同类型的价值,如上所述。

也可以在 access_tokens 的 aud 声明中有一个 Guid - Guid 将对应于资源应用程序的 AppId,因此,如果您有一个解析值的代码,它必须不仅要准备好处理 Uris,还要处理 Guid。