我注意到,当我登录后从Azure AD获得JWT时,JWT将“ https://login.microsoftonline.com”指定为颁发机构。但是,如果我使用client_credentials流获得JWT,则颁发机构为“ https://sts.windows.net”。具有不同的颁发机构,使得配置应用程序使用两种JWT变得很困难,因为配置过程仅允许您指定单个机构。
Microsoft是否有理由为JWT使用不同的发行机构?我以为是因为MSFT希望将这两种使用情况分开。也就是说,他们希望阻止在基于用户和基于非安全上下文之间切换的应用程序的创建。我还有其他原因吗?
答案 0 :(得分: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文档-Access Tokens Reference - Sample Tokens
请注意,这里的每个示例令牌都具有发行者格式。
还请查看共享的同一Microsoft文档链接中的重要说明。
如文档所述,令牌是基于“受众”创建的。它还提供了使用accessTokenAcceptedVersion
的示例。
您提到即使使用Azure AD v2终结点通过客户端凭据流获取令牌,您仍会看到按v1格式的发行者。
我认为您要为其获取令牌的应用程序很重要,如果它接受v1令牌,那么您将获得v1令牌(即使您使用了v2端点)。
此外,如果可能的话,请在您的问题中共享解码的令牌(减去敏感信息),以更加清楚。