1

我注意到,当我登录后从 Azure AD 获取 JWT 时,JWT 指定“ https://login.microsoftonline.com ”作为颁发机构。但是,如果我使用 client_credentials 流获取 JWT,则颁发机构是“ https://sts.windows.net ”。具有不同的颁发机构使得很难将应用程序配置为使用这两种 JWT,因为配置过程只允许您指定一个机构。

微软对 JWT 使用不同的颁发机构是否有原因?我认为这是因为 MSFT 想要分离这两种使用场景。也就是说,他们希望阻止创建在基于用户和非基于用户的安全上下文之间切换的应用程序。我失踪还有其他原因吗?

4

1 回答 1

0

您观察到的令牌的颁发者授权值格式的变化很可能是由于令牌的不同版本,即 Azure AD v1.0 令牌或 Azure AD v2.0 令牌(可能不是因为您使用了客户端凭据流或者说用于获取同一应用程序的访问令牌的身份验证代码流)

Azure AD v2.0 令牌 - 颁发者格式

    https://login.microsoftonline.com/<Azure AD Tenant GUID>/v2.0 

Azure AD v1.0 令牌 - 颁发者格式

    https://sts.windows.net/<Azure AD Tenant GUID>/ 

请查看此 Microsoft 文档 -访问令牌参考 - 示例令牌

请注意,这里的每个示例令牌都有颁发者格式。

另请查看共享的同一 Microsoft 文档链接中的重要说明。

正如文档所说,令牌是根据“观众”创建的。它还给出了一个使用的例子accessTokenAcceptedVersion

在此处输入图像描述

您提到,即使您使用 Azure AD v2 端点来获取带有客户端凭据流的令牌,您看到的颁发者也是按照 v1 格式的。

我认为您获取令牌的应用程序在这里很重要,如果它接受 v1 令牌,那么您将获得 v1 令牌(即使您使用了 v2 端点)。

此外,如果可能,请在您的问题中共享解码的令牌(减去敏感信息)以更清晰。

于 2019-11-01T19:45:17.387 回答