这个SAML SSO实现是否正确?

时间:2012-03-22 12:09:12

标签: single-sign-on saml

我有一个网站说 www.e1.com www.e1.com是服务提供商。每当我点击其中的服务时,我都会被重定向到身份提供商,例如www.e2.com 。在此之前,在服务提供商(www.e1.com)中,我将检查是否为用户设置了任何cookie。这是第一次没有cookie,所以它会发送空的SessionId值。因此,我发送SAML请求到www.e2.com并且没有id(因为没有设置cookie .Cookie包含Id)

现在在www.e2.com即在身份提供商处,我将检查www.e1.com是否发送了任何Id值。如果为null,我将创建会话ID并将其存储在数据库中(在www.e2.com中)。然后我将浏览器重定向到我的身份验证页面,其中将询问用户的姓名和密码,因此他将进行身份验证。如果身份验证成功,我将使用包含会话ID的SAML响应将浏览器重定向到服务提供商(www.e1.com)。

现在在服务提供商中,SessionId值将存储在Cookie中,浏览器将重定向到消费者服务页面(用户想要访问的服务页面)

< / p>

现在,如果同一用户想要从同一服务提供商访问某些其他服务 (在会话中),浏览器显然会在Cookie中发送SessionId以及请求SAML。身份提供者将检查其数据库中的SessionId值,如果它在其数据库中,那么它将直接访问用户的服务而不输入登录凭证,因为用户已经为会话进行了身份验证。

< / p>

这是使用SAML实现单点登录的正确方法吗?
如果这种方法有缺陷,你能解释一下这些缺陷吗?

提前致谢:)

1 个答案:

答案 0 :(得分:15)

你的理解不太正确:)

以下是流程:

  1. 用户尝试访问SP上的受保护资源。 SP检查是否 用户具有本地(和经过身份验证的会话)。如果没有它会产生一个 SAML <AuthRequest>,其中包含随机ID。然后SP重定向 使用此AuthnRequest的用户到IDP。

  2. IDP将检查用户是否具有本地经过身份验证的会话。如果 不会对用户进行身份验证IDP会发送AuthResponse 返回SP,其inReplyTo属性与发送的id匹配 其中的SP是AuthnRequest

  3. 然后,SP将创建一个本地会话。随后的请求 除非a)会话到期或b)SP,否则SP不会涉及IDP 从IDP收到SingleLogout条消息