Oauth 2.0 JWT从Azure AD令牌中声明的内容可以安全地用于用户映射?

Oauth 2.0 JWT从Azure AD令牌中声明的内容可以安全地用于用户映射?,oauth-2.0,jwt,azure-active-directory,openid-connect,Oauth 2.0,Jwt,Azure Active Directory,Openid Connect,我们使用OAuth 2.0从Azure广告中获取JWT令牌。在我们的应用程序中,我们使用了“upn”声明的值来标识相关的内部用户名 文件将upn声明记录为“用户主体名称”,据我所知,该名称是遵循addr规范格式的用户名(即。user@domain). 这对于在Azure AD租户中创建的用户非常有效。然而,令我惊讶的是,如果认证用户是从不同的广告同步的,upn声明似乎消失了。这种行为似乎没有任何记录 在哪里可以找到有关upn何时保证在令牌中的文档 我可以使用哪些可靠的替代声明?最好保证声明的形式

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

文件将upn声明记录为“用户主体名称”,据我所知,该名称是遵循addr规范格式的用户名(即。user@domain). 这对于在Azure AD租户中创建的用户非常有效。然而,令我惊讶的是,如果认证用户是从不同的广告同步的,upn声明似乎消失了。这种行为似乎没有任何记录

  • 在哪里可以找到有关upn何时保证在令牌中的文档
  • 我可以使用哪些可靠的替代声明?最好保证声明的形式为“用户/域”,因为这最符合我们的模型。我曾考虑过以下几点:
    • unique\u name:我只观察到它等于upn,但我不确定它来自哪里。令人困惑的是,该值表示:该值在租户中不保证唯一,且仅用于显示目的。(强调矿山)
    • 电子邮件:这似乎也等同于upn,但同样,它的来源是什么?在管理门户中,我尝试在与用户关联的每个电子邮件相关字段中添加不同的值,但它们似乎都没有传播到该声明中。因此,似乎该字段实际上不是电子邮件
  • 我想绝对肯定,我们的应用程序将能够处理Azure AD发行的所有代币,因此,除非我有一些说明其实际语义的文档,否则我不会使用上述任何声明

  • 我在哪里可以找到有关upn何时保证在令牌中的文档
  • 没有关于如何保证这一索赔的此类文件。根据测试,正如您所提到的,只有当用户不是外部用户时才可以发布

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

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

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

    虽然用户的UPN和主电子邮件地址通常是相同的,但这并不能保证(正如您所注意到的,UPN也不存在)。因此,您应该假设UPN!=电子邮件地址。如果您需要知道电子邮件地址,您应该拨打图形电话,并使用oid进行搜索。

    谢谢您的回答。我认为没有关于unique_名称和电子邮件语义的文档,那么?缺乏唯一性并不一定是个问题(多个广告主体仍然可以在我们的应用程序中识别同一个用户)。