单点登录(Single Sign-On,简称 SSO)是指用户只需要登录一次,即可在多个应用系统中访问受授权的资源。其原理是在用户登录之后,服务器会颁发一个令牌(Token),并将该令牌保存在共享的存储中(例如 Redis、数据库等),然后在用户访问其他应用系统时,该系统会向认证服务器发送请求,如果该用户已经登录过,则认证服务器会颁发一个新的令牌,否则需要用户重新登录。
下面简单介绍一下单点登录的实现方法:
1、Cookie + Session:采用 Cookie + Session 方式实现 SSO,其原理是在用户登录之后,认证服务器将用户信息存储在 Session 中,并生成一个 Session ID,然后将该 Session ID 存储在 Cookie 中,并返回给用户。用户在访问其他应用系统时,该系统会向认证服务器发送请求,并带上 Cookie 中的 Session ID。认证服务器通过 Session ID 来判断该用户是否已经登录过,如果已经登录过,则返回一个新的 Session ID 给应用系统,否则需要用户重新登录。
2、Token:采用 Token 方式实现 SSO,其原理是在用户登录之后,认证服务器生成一个 Token,并将该 Token 存储在共享的存储中(例如 Redis、数据库等),然后将该 Token 返回给用户。用户在访问其他应用系统时,该系统会向认证服务器发送请求,并带上 Token。认证服务器通过 Token 来判断该用户是否已经登录过,如果已经登录过,则返回一个新的 Token 给应用系统,否则需要用户重新登录。
下面简单介绍一下基于 Cookie + Session 的单点登录实现方法:
1、用户访问应用系统 A,该系统发现用户未登录,则重定向到认证服务器登录页面。
2、用户输入用户名和密码,认证服务器验证成功后,在 Session 中保存用户信息,并生成一个 Session ID,然后将该 Session ID 存储在 Cookie 中,并返回给应用系统 A。
3、用户访问应用系统 B,该系统发现用户未登录,则重定向到认证服务器的一个地址,该地址需要带上一个回调地址参数(即应用系统 B 的地址)。
4、认证服务器检查 Cookie 中是否存在 Session ID,如果存在,则表示该用户已经登录过,生成一个新的 Session ID,将用户信息保存在 Session 中,并将新的 Session ID 返回给应用系统 B。
5、应用系统 B 收到新的 Session ID 后,可以通过该 Session ID 获取用户信息,然后完成用户的登录。
以上是一个简单的基于 Cookie + Session 的单点登录实现方法,实际实现中还需要考虑一些安全性和可扩展性的问题。