声明:UPN、名称与 Azure AD 之间的区别

Claims: difference between UPN, Name with Azure AD

在 System.IdentityModel.Claims 中有三个条目:UPN、名称和名称标识符 “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 进行身份验证后进行调试时。我看到 name 和 upn 总是相同的,看起来像给定用户的 'email':例如johndoe@contoso.com 或 johdoe@contoso.onmicrosoft.com 而 nameidentifier 是一个非人类可读的标识符。

那么,我有几个问题:

1) 'name' 和 'upn' 在我的上下文中是否始终相同?

2) 它们是可变的吗?我们看到域名出现在名称(或 upn)中是否意味着如果 contoso.com 被 rototo.com 获取,则名称和 upn 可以被修改?或者类似地,如果公司在没有自定义域名的情况下开始其 Office365 订阅,但后来他们决定使用一个?这些索赔的价值可能会改变?

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

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

参考User Name Formats

  1. 第一个部分回答了第二个问题。 UPN 将根据域更改。域是 UPN 后缀。名称是显示名称,除非您在将 AD 用户从一个域迁移到另一个域时指定规则,否则可能不会更改。

  2. NameIdentifier 是唯一的 "SAML name identifier of the user"。换句话说,它只是用户对象的 ID。 目的:当尝试唯一地识别用户时,这应该是您的首选。

参考: