这个SAML SSO实现是否正确?

sur*_*raj 3 saml single-sign-on

我有一个网站说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 ieIn身份提供商,我将检查www.e1.com是否已发送任何Id值.如果为null,我将创建会话ID并将其存储在数据库中(在www.e2.com中).然后我将浏览器重定向到我的身份验证页面,其中将询问用户的姓名和密码,因此他将进行身份验证.如果身份验证成功,我将使用包含会话ID的SAML响应将浏览器重定向到服务提供商(www.e1.com).

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

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

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

提前致谢 :)

小智 15

你的理解不太正确:)

这是流程:

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

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

  3. 然后,SP将创建本地会话.除非a)会话到期或b)SP收到SingleLogout来自IDP 的消息,否则对SP的后续请求将不涉及IDP.

  • 向用户呈现包含具有隐藏字段的表单的HTML页面.此表单的操作设置为指向SP.然后,用户通过单击按钮或更可能使用在onDomLoaded事件期间触发的某些javascript来提交此表单.在这种情况下,用户POST回SP,虽然他可能没有意识到这发生了.这实际上是最常见的IDP-> SP绑定,它是我们默认使用的绑定 (2认同)