单点登录(Single Sign-On,简称SSO)是一种身份验证机制,用户只需要在一个地方进行一次登录,就可以访问所有相互信任的应用程序和系统,而无需再次输入用户名和密码。SSO可以提高用户体验,减少密码遗忘和管理成本,同时增强安全性。
要实现基于SAML的SSO,你需要两个主要组件:
- 身份提供者(IdP) - 负责认证用户并发出SAML断言。
- 服务提供者(SP) - 需要集成SSO的应用程序,它会从IdP接收SAML断言并据此授予访问权限。
SSO的实现方式有很多种,但其中最常见的是基于SAML(Security Assertion Markup Language)和OAuth 2.0协议的实现。下面是一个典型的基于SAML的SSO流程:
-
用户请求: 用户尝试访问一个受保护的应用程序(服务提供者,Service Provider,SP),但尚未登录。
-
重定向到身份提供者: SP检测到用户未登录,因此会重定向用户的浏览器到身份提供者(Identity Provider,IdP)的登录页面。
-
用户认证: 用户在IdP上输入用户名和密码进行认证。如果认证成功,IdP会生成一个SAML断言,其中包含用户的认证信息和授权信息。
-
发送SAML响应给SP: IdP将SAML响应(包含SAML断言)通过HTTP重定向或POST方式返回给SP。这个响应通常是一个带有签名的XML文档,以确保数据的安全性和完整性。
-
SP验证SAML响应: SP收到SAML响应后,会验证响应的有效性(如签名、断言的有效期等)。验证通过后,SP会认为用户已认证,从而允许用户访问应用。
-
用户访问应用: 用户现在可以无阻碍地访问SP提供的应用程序,直到会话过期或用户主动登出。
注销流程
- 用户登出时,应用程序会通知IdP注销该用户的会话。
- IdP会处理注销请求,并可能通知其他SP也注销该用户。