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

What JWT claims from Azure AD tokens can be safely used for user mappings?

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

Azure AD Token Referenceupn 声明记录为 "User Principal Name",据我所知,这是一个遵循 addr-spec 格式的用户名(即用户@域)。这适用于在 Azure AD 租户中创建的用户。然而,令我惊讶的是,如果经过身份验证的用户是从不同的 AD 同步的,upn 声明似乎消失了。这种行为似乎在任何地方都没有记录。

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

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

  1. Where can I find documentation on when the upn is guaranteed to be in a token?

没有关于如何保证此索赔的文件。经测试,如你所说,只有当用户不是外部用户时才会发出。

What are reliable alternative claims that I can use instead? Preferably claims guaranteed to be of the form "user/domain", as that matches our model best. I have considered the following:

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

如果您对 Azure 文档有任何反馈,可以尝试在右下角的 Is this page is helpful? 提交反馈,以帮助改进文档.

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