nameidentifier 声明的目的是啥?

Posted

技术标签:

【中文标题】nameidentifier 声明的目的是啥?【英文标题】:What is the purpose of nameidentifier claim?nameidentifier 声明的目的是什么? 【发布时间】:2011-08-14 09:58:15 【问题描述】:

http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier 类型的声明应该用于什么?

这是主要问题,还有其他问题。

它与http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name 声明有何不同?

相对于名称声明,它对于特定用户是永久的吗?

它是全球范围的还是 IdP 范围的?

【问题讨论】:

你找到答案了吗,安东? 嗨,@TommyJakobsen。很不幸的是,不行。最后,我们没有在我们的应用程序中使用这个声明。 【参考方案1】:

Name,就是这个名字。如果我们在谈论人,请想想“埃里克”;服务器“file01”。

NameIdentifier 是对象的 ID。回到我们的 person 对象,Eric 的 UserID 在您的数据库中可能是 435。对于服务器,标识符可以是 FQDN 或 SID 之类的东西。

根据this post,名称标识符显然是 SAML 1.1 属性,在 SAML 2.0 中被NameID 取代。

独特与否?

我想解决@Jason 的评论和@nzpcmad 的帖子。我不认为独特性是一个明确的要求。该问题被标记为adfs2.0,但引用的架构归 OASIS 所有。所以这些是我们需要平衡的两方解释。

Microsoft 对 ADFS 的立场显然是有一个独特的要求。我们在“The Role of Claims”文章中看到了这一点。毫无疑问,ADFS 投下了很大的阴影,但这似乎是一个实现细节。

然而,看着SAML 1.1 spec,我看不到这样的断言。我们在规范的第 2.4.2.2 节中得到的最接近的是:

元素通过一个组合指定一个主题 名称限定符、名称和格式。该元素有 以下属性: ... NameQualifier[可选] 安全域或管理域 限定主题的名称。该属性提供了一种手段 联合来自不同用户存储的名称而不会发生冲突。

规范的文本告诉我,我需要能够使用这三个属性的组合来找到一个人,但它没有断言唯一性。我不能有两个指向同一个用户的条目吗?似乎如此。此外,在NameIdentifier 不足以唯一标识名称的情况下,规范难道不会指出NameQualifier 属性是必需的吗?

那么这一切会导致什么?

小心,unqiue 可能更安全。 深入了解您的提供商对该主题的立场。

【讨论】:

我认为 nzpcmad 的回答在这里更加清晰。如果一个名称应该是唯一的,它就不仅仅是一个名称。我对是否应该使用 Name 或 NameIdentifier 来存储用户名感到困惑。现在我知道了。【参考方案2】:

根据The Role of Claims,

名称 用户的唯一名称

名称标识符 用户的 SAML 名称标识符

这两个声明是 AD FS 2.0 默认配置的声明组的一部分。

这意味着它们是 IP 范围的。

例如当您使用 ACS 登录 Google 时,“nameidentifier”是 Google 与您的帐户关联的唯一 GUID,而 name 是您的 Google 登录信息,例如“tim.smith@gmail.com”。

【讨论】:

感谢@nzpcmad 的关注。然而,我仍然不清楚“名称标识符”是什么意思。 “用户的 SAML 名称标识符”短语中没有说明。【参考方案3】:

ClaimTypes.Name 用于用户名ClaimTypes.NameIdentifier 将用户的身份 指定为对象透视图。如果您将它们添加到一种ClaimIdentity 对象中,该对象可让您访问User.Identity 方法(例如在dotnet 世界中),它们是GetUserName()GetUserId()

【讨论】:

【参考方案4】:

nameidentifier 声明应该用于获取唯一的用户名。

对于 Windows 身份验证:

http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier域\术士

http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name0#.w|域\warlock

domain\warlock 是 Windows 登录名

对于基于声明的身份验证:

http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifierwarlock@localhost.com

http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name05.t|myidentityprovider|warlock@localhost.com

电子邮件被指定为标识符声明

如您所见,.../identity/claims/name 也描述了名称和身份提供者。

【讨论】:

这个例子不是很清楚,与其他两个答案背道而驰,没有支持证据。接受的答案说 nameidentifier 基本上应该是一个唯一的整数或 GUID,而 name 应该是唯一的用户名。 链接已损坏

以上是关于nameidentifier 声明的目的是啥?的主要内容,如果未能解决你的问题,请参考以下文章

这个 [1] 在结构声明末尾的目的是啥?

在 Typescript 上声明类型时泄漏管道的目的是啥

在 Angular 中声明视图时添加额外的 'views:'foo':' 的目的是啥?

将方法参数声明为 final 的目的是啥? [复制]

Kafka ProducerConfig.CLIENT_ID_CONFIG 的目的是啥?

已经实施 csrf 保护时使用会话 id 的目的是啥?