我有一个网站,假设为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值。如果为空,我将创建一个会话ID并将其存储在数据库中(在www.e2.com中)。然后,我将重定向浏览器到我的身份验证页面,要求用户输入用户名和密码,并相应地进行身份验证。如果身份验证成功,我将使用包含会话ID的SAML响应将浏览器重定向到服务提供者(www.e1.com)。
现在,在服务提供者中,SessionId值将存储在Cookie中,并将浏览器重定向到消费者服务页面(用户想要访问的服务页面)。
现在,如果同一用户想要在同一服务提供商中访问其他服务(在会话期间),则浏览器显然会随请求SAML一起发送SessionId的Cookie。身份提供者将在其数据库中检查SessionId值,如果其数据库中存在,则会直接向用户提供服务访问权限,而无需输入登录凭据,因为用户已经在会话期间进行了身份验证。
这是使用SAML实现单点登录的正确方法吗?或者,如果此方法存在缺陷,您可以解释一下这些缺陷吗?
谢谢!
现在在www.e2.com即身份提供者中,我将检查www.e1.com是否已发送任何Id值。如果为空,我将创建一个会话ID并将其存储在数据库中(在www.e2.com中)。然后,我将重定向浏览器到我的身份验证页面,要求用户输入用户名和密码,并相应地进行身份验证。如果身份验证成功,我将使用包含会话ID的SAML响应将浏览器重定向到服务提供者(www.e1.com)。
现在,在服务提供者中,SessionId值将存储在Cookie中,并将浏览器重定向到消费者服务页面(用户想要访问的服务页面)。
现在,如果同一用户想要在同一服务提供商中访问其他服务(在会话期间),则浏览器显然会随请求SAML一起发送SessionId的Cookie。身份提供者将在其数据库中检查SessionId值,如果其数据库中存在,则会直接向用户提供服务访问权限,而无需输入登录凭据,因为用户已经在会话期间进行了身份验证。
这是使用SAML实现单点登录的正确方法吗?或者,如果此方法存在缺陷,您可以解释一下这些缺陷吗?
谢谢!
cookiechangeevent
并触发SLO URL。 - asgs