访客用户的UPN索赔在哪里?

Dan*_*ech 5 azure-active-directory

我们有一个辅助AAD,其中有来自主要AAD的来宾用户。为来宾用户生成的令牌似乎丢失了upn声明,但是我们依赖存在upn声明的事实,因为这就是我们用来跨系统映射用户的原因。

我了解来宾的Microsoft Live帐户可能缺少upn,但是这些是完整的AAD帐户,仅在另一个AAD中。微软的文档还建议unique_name声明实际上可能不是唯一的!

https://docs.microsoft.com/zh-CN/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"
}
Run Code Online (Sandbox Code Playgroud)

普通用户令牌内容:

{
    ......
    "tid": "xxxxxxxx-72d8-4715-b14f-990c93843416",
    "unique_name": "testAdmin@xxxxxxx.onmicrosoft.com",
    "upn": "testAdmin@xxxxxxx.onmicrosoft.com",
    "ver": "1.0"
Run Code Online (Sandbox Code Playgroud)

}

我知道您可能希望我们使用“ oid”,但这会导致我们在环境之间出现问题,因为同一用户在每个AAD中的值都不相同。

dst*_*kis 7

正如您所发现的,代表 Azure AD 中来宾用户的令牌(好吧,其中的令牌ver==1.0)确实会缺少该upn声明,但会包含该unique_name声明。这同样适用于来自其他 Azure AD 租户的来宾用户以及来自外部身份提供商的来宾用户。

来自其他 Azure AD 租户的来宾用户的声明值unique_name将是用户的 UPN(如果可用),否则将回退到用户的电子邮件地址。对于其他类型的访客用户,unique_name将采用其他格式和值。这个想法是,这unique_name是访客用户最努力的人类可读标识符。

在任何情况下,该unique_name值都可以更改,并且在极少数情况下,可能会发生冲突。这就是文档建议不要将其用作主要用户标识符的原因。Azure AD 系统中推荐的用户标识符是对象 ID,或oid

是的,oid同一个人在不同租户中的情况会有所不同。但这就是 Azure AD 租户模型的要点。另一个租户中的来宾用户对于应用程序来说是与其“主”租户中的用户完全不同的用户。如果您想将这两个用户映射在一起,最好的方法就是使用启发式方法,例如unique_name.

我建议您在 Feedback.azure.com 上提出以下请求:

  1. 可靠的用户标识符,可以跨租户识别用户。
  2. 有关如何在 AAD 中处理访客帐户的更好文档。