从Azure AD OAuth v2令牌终结点获取client_credentials令牌时,sub和oid声明中的内容是什么?

时间:2018-07-31 16:06:44

标签: azure oauth-2.0 azure-active-directory azure-ad-b2c

我可以在设置密钥/秘密后获得这些令牌,但是我不知道是否或者如何依靠我的应用程序中的子声明。

要获得更多背景知识,我的应用程序实际上是B2C注册的应用程序,我要转到B2C租户中的v2端点,但未指定使用客户端凭据流的策略(可能会产生常规的AAD,非B2C令牌-我必须在后端加载多个键集才能使令牌验证正常工作,因为我们基本上是通过这种方式使用多个令牌源进行的)。在我们的应用程序中,我们使用中间件来验证JWT Bearer令牌,并按sub / oid查找有效的调用方,以将任何适当的声明添加到上下文声明标识中。

在这种client_credentials的情况下,我试图确定oid是否与某些服务主体,我的应用,代表所使用的客户端机密的GUID或完全相关的其他内容-以及我是否可以足够地依赖它使用适当的应用程序特权将其添加到我预期的“用户”数据库中。理想情况下,将有一种更简单的方法来识别用于服务到服务调用的令牌。

以下是使用Postman检索这些令牌的示例: using Postman to get a client_credentials token

导致:

{
    "token_type": "Bearer",
    "expires_in": 3599,
    "ext_expires_in": 0,
    "access_token": "eyJ...pcQ"
}

令牌内容,来自jwt.io:

enter image description here

2 个答案:

答案 0 :(得分:1)

@juunas的答案正确(这是服务主体)。困难在于验证答案。

就我而言,我正在获取Azure AD B2C租户中定义的appId的令牌。租户是使用我的主(企业)登录名创建的。服务主体很难在Azure中找到,我使用AzureAD Powershell扩展遵循了一些建议。最终,我发现我遇到了与this guy相同的问题,因此我在租户中创建了一个管理员,以便在使用MSOnline扩展名通过Powershell登录时使用。一旦完成设置并通过Powershell以正确的帐户登录,我便能够运行Get-MsolServicePrincipal -TenantId 88...e9 -AppPrincipalId 0a...23来查看我的应用程序的信息。结果显示的AppPrincipalId是在门户中可见的应用程序ID。返回的ObjectId与我在为此应用程序发行的客户端凭据授予令牌中看到的oid(和子)相符。

Powershell output

答案 1 :(得分:0)

OID是用户的对象ID。可以在Azure Active Directory>所有用户>单击用户>用户概述中查看。

请参阅this blog post来解释这些值。

enter image description here

sub是令牌中标识的用户:

ServletModule

示例JWT值:

Guice

请参见this reference