Azure AD 令牌中的哪些 JWT 声明可以安全地用于用户映射?

Posted

技术标签:

【中文标题】Azure AD 令牌中的哪些 JWT 声明可以安全地用于用户映射?【英文标题】:What JWT claims from Azure AD tokens can be safely used for user mappings? 【发布时间】:2017-04-19 17:42:09 【问题描述】:

我们使用 OAuth 2.0 从 Azure AD 获取 JWT 令牌。在我们的应用程序中,我们使用了“upn”声明的值来识别关联的内部用户名。

Azure AD Token Reference 将 upn 声明记录为“用户主体名称”,据我了解,它是遵循 addr-spec 格式的用户名(即 user@domain)。这适用于在 Azure AD 租户中创建的用户。然而,令我惊讶的是,如果经过身份验证的用户是从不同的 AD 同步的,则 upn 声明似乎消失了。这种行为似乎没有记录在任何地方。

    我在哪里可以找到关于何时保证 upn 在令牌中的文档? 我可以使用哪些可靠的替代声明?最好声明保证采用“用户/域”的形式,因为这与我们的模型最匹配。我考虑了以下几点: unique_name:我只观察到它等于 upn,但我不确定它来自哪里。令人困惑的是,token reference 说:此值保证在租户中是唯一的,并且仅用于显示目的。(强调我的)李> email:这似乎也等于 upn,但同样,它来自哪里?在管理门户中,我尝试在与用户关联的每个电子邮件相关字段中设置不同的值,但似乎没有一个值被传播到此声明。因此,该字段似乎实际上不是电子邮件

我想绝对确定我们的应用程序将能够处理由 Azure AD 发布的所有令牌,因此除非我有一些解释其实际语义的文档,否则我会犹豫是否使用上述任何声明。

【问题讨论】:

【参考方案1】:
    我在哪里可以找到关于何时保证 upn 在令牌中的文档?

没有关于如何保证此索赔的此类文件。根据测试,正如您所说,仅当用户不是外部用户时才发布。

我可以使用哪些可靠的替代声明?最好声明保证采用“用户/域”的形式,因为这与我们的模型最匹配。我考虑了以下几点:

我们可以使用oid 声明来映射用户。此声明 包含 Azure AD 中对象的唯一标识符。此值是不可变的,不能重新分配或重用。使用对象 ID 来标识 Azure AD 查询中的对象。

如果您对 Azure 文档有任何反馈,可以尝试从右下角的此页面是否有帮助?提交反馈,以帮助改进文档。

【讨论】:

感谢您的回答。我认为没有关于 unique_nameemail 语义的文档,那么?缺乏唯一性不一定是问题(多个 AD 主体仍然可以在我们的应用程序中识别同一用户)。【参考方案2】:

虽然用户的 UPN 和主电子邮件地址相同是很常见的,但这并不能保证(您也注意到 UPN 的存在)。因此,您应该在 UPN != 电子邮件地址的假设下进行操作。如果您需要知道电子邮件地址,您应该进行 Graph 调用并使用 oid 进行搜索。

【讨论】:

以上是关于Azure AD 令牌中的哪些 JWT 声明可以安全地用于用户映射?的主要内容,如果未能解决你的问题,请参考以下文章

从 Azure AD 发出 JWT 令牌中的角色

避免 Azure AD 颁发的 JWT 令牌中的个人信息

Azure AD - 为啥我无法验证 Azure AD 为我的 Web API 颁发的 JWT 令牌?收到“IDX10516:签名验证失败”错误

.net 核心 2.2 Azure Ad Jwt 令牌

仅验证从 Azure B2C AD 生成的 JWT 令牌的签名 [重复]

Azure B2C - 无法从策略中的 JWT 客户端断言令牌读取“日期”声明