从 Azure AD OAuth v2 令牌端点获取 client_credentials 令牌时 sub 和 oid 声明中有什么?

spr*_*ean 5 azure oauth-2.0 azure-active-directory azure-ad-b2c

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

有关更多背景信息,我的应用程序实际上是一个 B2C 注册应用程序,我将转到 B2C 租户中的 v2 端点,但没有指定策略以使用客户端凭据流(可能导致常规 AAD,非 B2C令牌——我必须在后端加载多个密钥集才能使令牌验证工作,因为我们基本上使用多个令牌源这样做)。在我们的应用程序中,我们使用中间件来验证 JWT Bearer 令牌并通过 sub/oid 查找有效调用者以将任何适当的声明添加到上下文声明标识中。

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

以下是使用 Postman 检索这些令牌的示例: 使用 Postman 获取 client_credentials 令牌

导致:

{
    "token_type": "Bearer",
    "expires_in": 3599,
    "ext_expires_in": 0,
    "access_token": "eyJ...pcQ"
}
Run Code Online (Sandbox Code Playgroud)

令牌内容,来自 jwt.io:

在此处输入图片说明

spr*_*ean 5

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

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

Powershell输出

  • 以典型的方式,在努力寻找困难的解决方案之后,我找到了简单的解决方案:在 B2C 租户中(切换到租户目录后),我转到 Azure Active Directory 边栏选项卡,选择“企业应用程序”,将过滤器更改为“所有应用程序”,然后我的应用程序出现并显示对象 ID 和应用程序 ID。 (5认同)