azure-active-directory - guest 用户的 UPN 声明在哪里?

标签 azure-active-directory

我们有一个辅助 AAD,其中包含来自主要 AAD 的 guest 用户。为 guest 用户生成的 token 似乎缺少 upn 声明,但我们依赖于存在 upn 声明的事实,因为这是我们用来跨系统映射用户的内容。

我知道 guest Microsoft Live 帐户可能缺少 upn,但这些是完整的 AAD 帐户,只是在另一个 AAD 中。微软的文档还表明 unique_name 声明实际上可能不是唯一的!!

https://docs.microsoft.com/en-us/azure/active-directory/develop/active-directory-token-and-claims

你能告诉我是什么决定了 unique_name 声明的值(value)吗?

如果 upn 声明不存在或者是外部 guest 用户,我们使用此声明回退是否安全?

guest 用户 token 内容

{
    ..,...
    "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 中将具有不同的值。

最佳答案

代表 Azure AD 中 guest 用户的 token (以及 ver==1.0 中的 token )确实会缺少 upn声明,但将包含 unique_name声称,正如你所发现的。这同样适用于来自其他 Azure AD 租户的 guest 用户,以及来自外部身份提供商的 guest 用户。
unique_name的值来自其他 Azure AD 租户的 guest 用户声明将是用户的 UPN(如果可用),或者回退到用户的电子邮件地址。对于其他类型的访客用户,unique_name将采用其他格式和值。这个想法是unique_name是访客用户的最大努力人类可读标识符。

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

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

我建议您在feedback.azure.com 上提交请求以了解以下几点:

  • 一个可靠的用户标识符,可以跨租户识别用户。
  • 关于如何在 AAD 中处理访客帐户的更好文档。
  • 关于azure-active-directory - guest 用户的 UPN 声明在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45047129/

    相关文章:

    azure - 如何查找azure虚拟机的引用对象ID?

    azure - 使用 GraphAPI 的 AAD token 无法访问我自己的 Rest API?

    javascript - Active Directory 集成问题 Nodejs

    powershell - 与 Microsoft Azure AD 模块 PowerShell 和 Microsoft Azure Powershell 的不同之处

    azure - HTTP 错误 502.5 - 进程失败 - 无法在 Azure 上发布应用程序

    azure - 为什么需要为已受 Azure AD 保护的 Azure 服务添加 OAuth 2.0

    azure-active-directory - 使用Azure AD Multi-Tenancy 的Azure AD B2C身份验证

    azure - 如何使用 Azure AD 的 MSAL 库仅允许登录客户端应用程序中的某些角色

    java - 如何连接到登录用户流程

    azure - 如何使用应用程序注册和 azure cli 命令获取所有 azure 应用程序注册并查看 secret 的到期日期?