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 声明的目的是啥?的主要内容,如果未能解决你的问题,请参考以下文章
在 Angular 中声明视图时添加额外的 'views:'foo':' 的目的是啥?