2

我们的应用程序允许为组分配权限,这意味着对于每个用户,我们必须可靠地确定组成员身份。用户出示通过 ADAL 定期获得的令牌(一些使用 .NET,其他使用 NodeJS,其他使用 CLI)。

一些用户似乎正在发送带有以下声明的令牌:

"hasgroups": true,

Azure AD 令牌参考页中记录了该声明。

我们想为此添加一个测试用例,但是在执行此处此处的步骤之后,我们总是会得到一个带有以下声明的令牌:

"_claim_names": {
  "groups": "src1"
},
"_claim_sources": {
  "src1": {
    "endpoint": "https://graph.windows.net/{redacted}/users/{redacted}/getMemberObjects"
  }
},

我们的设置有什么问题?为什么我们不能得到hasgroups索赔?

以下是一些附加信息:

  • 应用程序类型是 Native(不是 WebApi)。
  • 清单说"oauth2AllowImplicitFlow": true
  • 该应用程序被授予对 Azure Key Vault 的访问权限。

我们使用以下代码来获取令牌(在 C# 中):

var userCredential = new UserCredential( _userName, _password );
result = context.AcquireToken( _resource, _clientId, userCredential );

在哪里:

  • _userName并且_password来自有很多组的用户。
  • _clientId是本机应用程序的应用程序 ID - 带有"oauth2AllowImplicitFlow": true.
  • _resourcehttps://vault.azure.net

令牌已正确发出。唯一的问题是它显示_claim_namesand_claims_sources而不是hasgroups.

4

2 回答 2

1

其中: • _userName 和_password 来自具有许多组的用户。

由于用户是许多组的一部分(假设这里有 6 个或更多)。Azure AD 令牌将返回一个组超额指示符,而不是“组”声明中的实际组 ID。我想你知道这一点,因此故意这样做。

var userCredential = new UserCredential( _userName, _password );
result = context.AcquireToken( _resource, _clientId, userCredential );

由于您使用 C# 代码在基于 .NET 的应用程序中获取令牌,因此令牌响应的长度并没有真正受到限制(例如在 Web SPA 的情况下,它作为 URI 片段返回并且 URL 长度有限制)

查看文档“hasgroups”和“groups:src1”声明的目的相同,即告知有太多组作为令牌的一部分返回。虽然有细微的差别:

  • 在应用 URL 限制的情况下,“hasgroups”将作为 true 发送(如 SPA 的隐式授权流)

  • 在长度不受限制的情况下(如您的情况),Azure AD 仍不会返回所有组以确保令牌不会变得太大,但它会发送更多关于如何访问所有组的信息通过发送有关如何查询所有组的信息。在这种情况下,它发送带有源信息的“groups:src1”和“_claim_sources”,而不仅仅是“hasgroups”

id_tokens 中的声明 在此处输入图像描述

于 2018-09-18T01:57:25.167 回答
-1

对于任何对此有更多了解的人。请参考文档saml-tokens

在此处输入图像描述

笔记 在此处输入图像描述

来源:Azure 示例链接

于 2019-03-15T13:48:22.210 回答