在System.IdentityModel.Claims中,存在三个条目:UPN,Name和NameIdentifier
http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name
http://schemas.xmlsoap.org/ws/2005/05/identity/claims/upn
http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier

在使用AzureAD,OpenIdConnect和Office365进行身份验证之后进行调试时。我看到名称和upn始终相同,就像给定用户的“电子邮件”: [email protected][email protected]
而nameidentifier是非人类可读的标识符。

然后,我确实有几个问题:

1)在我的上下文中,“名称”和“upn”是否总是相同?

2)它们是可变的吗?我们看到域名(或upn)中存在域名,这是否意味着如果rototo.com收购了contoso.com,则可以修改名称和upn吗?还是类似地,如果公司在没有自定义域名的情况下开始其Office365订阅,但后来他们决定一个人订阅?这些 claim 的值(value)可能会发生变化?

3)与2)有关,但是NameIdentifier是获取对特定用户的引用的唯一安全方法吗?例如要作为外键存储在数据库中?

最佳答案

  • UPN是用户主体名称。它始终采用看起来像电子邮件地址的格式。本质上,它分为三个部分。用户帐户名称,分隔符(即@符号)和UPN后缀或域名。它的主要用途用于身份验证期间。而名称应该用于显示。名称和UPN可以相同或不同。根据您的目标,您应该使用一个对另一个。

  • 请参阅User Name Formats
  • 第一个回答第二个问题。 UPN将根据域而变化。域是UPN后缀。名称是显示名称,除非您在将AD用户从一个域迁移到另一个域时指定规则,否则名称不能更改。
  • NameIdentifier 是唯一的“用户的SAML名称标识符”。换句话说,它只是用户对象的ID。 目的:当试图唯一地标识用户时,这应该是您的首选。

  • 引用:
  • The Role of Claims
  • Ealier question on Stackoverflow regarding purpose of NameIdentifier
  • 关于office365 - 使用Azure AD声明: difference between UPN,名称,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36722037/

    10-11 00:59