Azure active directory 用户JWTs与客户端JWTs的不同权限

Azure active directory 用户JWTs与客户端JWTs的不同权限,azure-active-directory,microsoft-identity-platform,Azure Active Directory,Microsoft Identity Platform,我注意到,当我在登录Azure AD后获得JWT时,JWT指定“”作为发布权限。但是,如果我使用client_凭据流获得JWT,则颁发机构为“”。拥有不同的发布权限使得很难将应用程序配置为使用这两种JWT,因为配置过程只允许指定一个权限 微软对JWT使用不同的发行机构有什么原因吗?我认为这是因为MSFT想要将这两种使用场景分开。也就是说,他们希望阻止创建在基于用户和非基于用户的安全上下文之间切换的应用程序。还有其他原因吗?您正在观察的令牌的颁发者权限值格式的更改很可能是由于令牌的不同版本,即Az

我注意到,当我在登录Azure AD后获得JWT时,JWT指定“”作为发布权限。但是,如果我使用client_凭据流获得JWT,则颁发机构为“”。拥有不同的发布权限使得很难将应用程序配置为使用这两种JWT,因为配置过程只允许指定一个权限


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

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

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

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

注意,这里的每个示例令牌都有issuer格式

还可以查看共享的同一Microsoft文档链接中的重要注意事项

正如文档所述,令牌是基于“受众”创建的。它还提供了一个使用
accessTokenAcceptedVersion
的示例

您提到,即使您正在使用Azure AD v2端点获取具有客户端凭据流的令牌,您仍然可以看到按照v1格式的发行者

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


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

您正在观察的令牌的发卡机构权限值格式的更改很可能是由于令牌的不同版本,即Azure AD v1.0令牌或Azure AD v2.0令牌(可能不是因为您使用客户端凭据流或说身份验证代码流来获取同一应用程序的访问令牌)

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

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

注意,这里的每个示例令牌都有issuer格式

还可以查看共享的同一Microsoft文档链接中的重要注意事项

正如文档所述,令牌是基于“受众”创建的。它还提供了一个使用
accessTokenAcceptedVersion
的示例

您提到,即使您正在使用Azure AD v2端点获取具有客户端凭据流的令牌,您仍然可以看到按照v1格式的发行者

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


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

您获取令牌的目的是什么应用程序?如果它是您的应用程序并且您有权访问清单,请尝试检查应用程序注册>清单中的
accessTokenAcceptedVersion
。可能是应用程序需要一个v1令牌,这就是为什么要向它颁发v1令牌的原因。。此外您在问题中提到的用户令牌,其发行者类似于
login.microsoftonline.com/。
,该令牌是用于相同的应用程序还是其他不同的应用程序?因此,您的声明是,对发行权限的更改是由于构建JWT的令牌端点造成的,而且您还说,issuer值为sts.windows。net/表示令牌是由AD v.10终结点颁发的。但是,我显式调用以下URL以获取客户端凭据令牌:login.microsoftonline.com//oauth2/v2.0/token,这是v2终结点。因此,如果我理解正确,我不应该在令牌中看到V1颁发者。我缺少什么?清单如下所示:“accessTokenAcceptedVersion”:null。是的,两个令牌都用于同一个应用程序。我正在尝试确定是否可以设置一个ASP.NET核心API来响应用户令牌和客户端凭据令牌,而无需进行大量配置。请共享这两个解码令牌(您可以使用或)?另外..请隐藏/删除任何敏感信息..为了回答您更广泛的问题,您需要API响应不同的令牌..是的,这是可能的..在一种情况下,您将拥有用户上下文,而在另一种情况下,它将是应用程序标识(无用户)@G.A.Alderman我添加了Microsoft文档中一个重要注释的屏幕截图,以及您看到的用于获取令牌v/s的令牌端点(发卡机构值)的可能原因。一旦您共享解码令牌,两个令牌之间差异的原因(一个来自用户流v/s客户端凭据流)可能也会变得更清楚。您获取令牌的目的是什么应用程序?如果它是您的应用程序并且您有权访问清单,请尝试检查应用程序注册>清单中的
accessTokenAcceptedVersion
。可能是应用程序需要一个v1令牌,这就是为什么会向它颁发v1令牌。此外,用户令牌您在问题中提到的具有类似于login.microsoftonline.com/.
的发卡机构的是同一应用程序的令牌还是其他什么?因此,您的声明是,对发卡机构的更改是由于构建JWT的令牌端点造成的,此外,您还说,发卡机构值sts.windows.net/意味着该令牌由AD v.10终结点颁发。但是,我显式调用以下URL以获取客户端凭据令牌:login.microsoftonline.com//oauth2/v2。