我是SAML的新手,完全了解SAML2 SSO的完整过程有些麻烦。

具体而言,当服务提供者使用元素响应资源请求时,元素中的哪段数据标识了身份提供者要验证的主体(即用户)?

例如,在下面的AuthnRequest中似乎没有任何可标识主体的内容:

<samlp:AuthnRequest
xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol"
xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion"
ID="identifier_1"
Version="2.0"
IssueInstant="2004-12-05T09:21:59"
AssertionConsumerServiceIndex="0">
<saml:Issuer>https://sp.example.com/SAML2</saml:Issuer>
<samlp:NameIDPolicy
  AllowCreate="true"
  Format="urn:oasis:names:tc:SAML:2.0:nameid-format:transient"/></samlp:AuthnRequest>


在AuthnRequest到达浏览器之后(也许是从cookie中),是否添加了标识主体的信息,或者根本没有将标识特定用户的信息发送给身份提供者?

最佳答案

规范在身份验证请求(SAML配置文件,http://docs.oasis-open.org/security/saml/v2.0/saml-profiles-2.0-os.pdf,第4.1.4.1节)中说明了以下内容:


注意,服务提供者可以在
要求提供希望使用的真实身份
收到一个断言。


但是,这种方式很少使用,并且没有在不同的提供者/堆栈之间广泛实施,因此您的里程可能会有所不同。实际上,有一些部署配置文件明确禁止使用<Subject>,例如, http://saml2int.org/profile/current/ 8.2节说:


<Subject>消息不得包含<saml2p:AuthnRequest>
元件。


通常的交互是服务提供商确定身份提供商而不是用户。后者留给身份提供者,包括身份验证和身份验证。这是一个更干净的界面,避免了两个关于标识符和帐户的潜在冲突。

08-19 09:23