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

8
我们使用OAuth 2.0从Azure AD获取JWT令牌。在我们的应用程序中,我们使用“upn”声明的值来识别相关的内部用户名。 Azure AD Token Reference文件将upn声明称为“用户主体名称”,据我了解,这是遵循addr-spec格式的用户名(即user@domain)。对于在Azure AD租户中创建的用户,这很有效。然而,令我惊讶的是,如果认证用户从不同的AD同步,则upn声明似乎已经消失。这种行为似乎没有被记录在任何地方。
  1. 我在哪里可以找到有关令牌中 upn 保证存在的文档?
  2. 我可以使用哪些可靠的替代声明?最好保证声明的格式为“用户/域”,因为这与我们的模型最匹配。我已考虑了以下内容:
    • unique_name :我只观察到它等于 upn ,但我不确定它来自哪里。令人困惑的是,token reference说:此值保证在租户内唯一,并且仅设计用于显示目的。(我强调)
    • email :这似乎也等于 upn ,但同样,它是从哪里获取的?在管理门户中,我尝试将不同的值放入与用户相关联的每个电子邮件字段中,但似乎没有一个传播到此声明。因此,该字段实际上并非电子邮件。

我希望能够确保我们的应用程序能够处理由Azure AD发出的所有令牌,因此我不确定是否使用上述任何声明,除非我有一些解释其实际语义的文档。

2个回答

2
  1. 我在哪里可以找到有关upn何时保证在令牌中的文档?

没有这样的文件说明如何保证此声明。根据测试,正如您所提到的,仅在用户不是外部用户时才会发出。

有什么可靠的替代声明可以使用?最好保证形式为“用户/域”,因为这最符合我们的模型。我考虑了以下内容:

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

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


谢谢您的回答。那么,unique_nameemail的语义没有文档记录吗?缺乏唯一性并不一定是问题(多个AD主体仍然可以在我们的应用程序中识别同一用户)。 - Ulrik Rasmussen

0

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接