不同的NameID格式用于什么?

77

在 SAML metadata 文件中定义了多种 NameID 格式,例如:

<NameIDFormat>urn:mace:shibboleth:1.0:nameIdentifier</NameIDFormat>

<NameIDFormat>urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified</NameIDFormat>

<NameIDFormat>urn:oasis:names:tc:SAML:2.0:nameid-format:transient</NameIDFormat>

有人能够解释一下这些是用来做什么的吗?它们之间有什么区别吗?

4个回答

79
请参考oasis SAML规范的SAML核心pdf第8.3节。
SP和IdP通常会彼此交流有关主题的信息。 该主题应通过名称标识符进行标识,该标识符应采用某种格式,以便对方可以根据格式轻松识别它。
所有这些内容。
1.urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified [default]

2.urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress

3.urn:oasis:names:tc:SAML:2.0:nameid-format:persistent

4.urn:oasis:names:tc:SAML:2.0:nameid-format:transient

这是关于名称标识符格式的内容。

在SAML 1中,瞬态ID的名称格式为urn:mace:shibboleth:1.0:nameIdentifier,在SAML 2中为urn:oasis:names:tc:SAML:2.0:nameid-format:transient

Transient对应[SAML核心第8.3.8节]。

指示元素的内容是具有瞬态语义的标识符,并且依赖方应将其视为不透明和临时值。

未指定的格式可以根据实体的实现情况自行选择使用。


如果您返回的是公共的userId,并且您不打算很快更改它们,那么我认为您想要“persistent”。 - Rob Starling
我在规范中没有看到任何关于“未指定”格式应被视为[默认]的说明。如果您能找到相关参考资料,我会非常感兴趣。您还记得您从哪里得到这个信息吗? - alxgomz
3
请参见规范文档中第455行及其后面的内容,具体来说是指:除非基于该类型的元素另有规定,否则如果未提供格式值,则将启用值urn:oasis:names:tc:SAML:1.0:nameid-format:unspecified(请参见第8.3.1节)。 - Mike Partridge
1
Transient表示NameID将是随机的,例如MfJkZue5tTB0mSqfUMe4iPqLd4e。如果同一人删除其Cookie并完全重新进行身份验证,则ID将更改。但是有时默认值为"transient",但实际上配置为其他固定值,如电子邮件或用户名的NameID不会更改。请注意,SAML响应中的短暂名称ID仅应在主题条件中设置的NotOnOrAfter时间之前使用。 - Curtis Yallop

29

关于这个问题,我认为您可以参考http://docs.oasis-open.org/security/saml/Post2.0/sstc-saml-tech-overview-2.0.html

以下是我的理解,使用身份联合用例来详细介绍这些概念:

  • 持久标识符 -

IdP提供了持久标识符,它们用于链接到SP中的本地帐户,但它们仅标识单个特定服务的用户配置文件。例如,持久标识符类似于:johnForAir、jonhForCar、johnForHotel,它们仅用于一个指定服务,因为它需要与服务中的本地标识关联。

  • 瞬时标识符 -

瞬时标识符是IdP告诉SP,会话中的用户已被授予访问SP上资源的权限,但实际上用户的身份并未提供给SP。例如,断言就像“匿名(Idp不告诉SP他是谁)获得访问/资源的权限”。 SP收到它后,允许浏览器访问,但仍然不知道匿名的真实姓名。

  • 未指定的标识符 -

规范中对它的解释是“该元素内容的解释留给各个实现。”这意味着IdP定义了它的实际格式,并假设SP知道如何解析从IdP返回的格式数据。例如,IdP提供了一个格式化数据“UserName = XXXXX Country = US”,SP得到断言后可以解析并提取出UserName为“XXXXX”。


5
谢谢你对“我对此的理解”的认可。有时候,将信息综合在一起的人所思考的问题可能比规范本身更有价值。感谢您的评论。 - chaserb

20

这只是对服务提供商的提示,告诉其可以从身份提供商返回的NameID中期望什么。它可以是以下内容之一:

  1. 未指定
  2. 电子邮件地址 - 例如:john@company.com
  3. X509SubjectName - 例如:CN=john,O=Company Ltd.,C=US
  4. WindowsDomainQualifiedName - 例如:CompanyDomain\John
  5. Kerberos - 例如:john@realm
  6. 实体 - 用于标识提供基于SAML的服务的实体,看起来像一个URI
  7. 持久性 - 这是一个不透明的服务特定标识符,必须包括伪随机值并且不能追溯到实际用户,因此这是一个隐私功能。
  8. 瞬时 - 不透明标识符应视为临时。

当你说“这只是一个提示”时,IDP能否提供除所请求的内容之外的其他内容?如果可以,那么它仍然可以工作吗? - Matt Shepherd
2
规范中没有关于这个的说明。 - kirelagin

4

1和2是SAML 1.1,因为这些URI是OASIS SAML 1.1标准的一部分。链接PDF文档的第8.3节介绍了这一点:

Where possible an existing URN is used to specify a protocol. In the case of IETF protocols, the URN of the most current RFC that specifies the protocol is used. URI references created specifically for SAML have one of the following stems, according to the specification set version in which they were first introduced:

urn:oasis:names:tc:SAML:1.0:
urn:oasis:names:tc:SAML:1.1:
urn:oasis:names:tc:SAML:2.0:

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接