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_name 和 email 语义的文档,那么?缺乏唯一性不一定是问题(多个 AD 主体仍然可以在我们的应用程序中识别同一用户)。【参考方案2】:虽然用户的 UPN 和主电子邮件地址相同是很常见的,但这并不能保证(您也注意到 UPN 的存在)。因此,您应该在 UPN != 电子邮件地址的假设下进行操作。如果您需要知道电子邮件地址,您应该进行 Graph 调用并使用 oid 进行搜索。
【讨论】:
以上是关于Azure AD 令牌中的哪些 JWT 声明可以安全地用于用户映射?的主要内容,如果未能解决你的问题,请参考以下文章
Azure AD - 为啥我无法验证 Azure AD 为我的 Web API 颁发的 JWT 令牌?收到“IDX10516:签名验证失败”错误