【发布时间】:2017-12-16 06:12:46
【问题描述】:
我们有一个辅助 AAD,其中包含来自主 AAD 的来宾用户。为来宾用户生成的令牌似乎缺少 upn 声明,但我们依赖于存在 upn 声明这一事实,因为这是我们用来跨系统映射用户的方法。
我了解来宾 Microsoft Live 帐户可能缺少 upn,但这些是完整的 AAD 帐户,只是在另一个 AAD 中。微软的文档还表明,unique_name 声明实际上可能不是唯一的!
https://docs.microsoft.com/en-us/azure/active-directory/develop/active-directory-token-and-claims
你能告诉我是什么决定了 unique_name 声明的价值吗?
如果 upn 声明不存在或者是外部访客用户,我们可以安全地使用此声明回退到吗?
访客用户令牌内容
{
..,...
"tid": "xxxxxxxx-7ea7-413c-96bc-3f3aba133732",
"unique_name": "testAdmin@xxxxxxxx.onmicrosoft.com",
"ver": "1.0"
}
普通用户Token内容:
{
......
"tid": "xxxxxxxx-72d8-4715-b14f-990c93843416",
"unique_name": "testAdmin@xxxxxxx.onmicrosoft.com",
"upn": "testAdmin@xxxxxxx.onmicrosoft.com",
"ver": "1.0"
}
我知道您可能希望我们使用“oid”,但这会导致我们在环境之间出现问题,因为同一用户在每个 AAD 中的值会不同。
【问题讨论】:
-
只想提一下,你是对的,unique_name 不是“唯一的”。阅读token claims page 上的说明。
Provides a human readable value that identifies the subject of the token. This value is not guaranteed to be unique within a tenant and is designed to be used only for display purposes. -
所以我的一个问题是如何在租户中计算或确定该值? AAD 管理员可以对用户记录做些什么来更改它?同样作为一名建筑师和喜欢干净命名的人,为什么这种说法被称为 unique_name?
-
我们的情况完全相同。到目前为止,我们一直使用
unique_name,但事实证明,此标识符在所有情况下都与 UPN 的值不匹配,例如对于租户来宾用户。我认为我们的解决方案是使用upn并在unique_name上进行回退,对于进一步的Graph API 用户查询,查询所有用户并检查userPrincipalName和mail是否匹配。关于unique_name的命名,我个人看了微软的文档笑了。