单点登录SSO

单点登录:Single Sign On,是指在多个应用系统中,用户只需要登录任意一个系统,就可以访问其他的互相信任的系统,能有效提升用户体验

实现方式

同域下的单点登录

父域cookie
方式:
Cookie 的作用域由 domain 属性和 path 属性共同决定。domain 属性的有效值为当前域或其父域的域名/IP地址,在 Tomcat 中,domain 属性默认为当前域的域名/IP地址。path 属性的有效值是以“/”开头的路径,在 Tomcat 中,path 属性默认为当前 Web 应用的上下文路径。
如果将 Cookie 的 domain 属性设置为当前域的父域,那么就认为它是父域 Cookie。Cookie 有一个特点,即父域中的 Cookie 被子域所共享,也就是说,子域会自动继承父域中的 Cookie。
利用 Cookie 的这个特点,可以将 Session Id(或 Token)保存到父域中就可以了。我们只需要将 Cookie 的 domain 属性设置为父域的域名(主域名),同时将 Cookie 的 path 属性设置为根路径,这样所有的子域应用就都可以访问到这个 Cookie 了。不过这要求应用系统的域名需建立在一个共同的主域名之下,如 tieba.baidu.com 和 map.baidu.com,它们都建立在 baidu.com 这个主域名之下,那么它们就可以通过这种方式来实现单点登录。

此种实现方式比较简单,但不支持跨主域名

认证中心(标准单点登录)

JWT(JSON Web Tokens)方案

登陆:

  1. 部署一个认证中心
    【认证中心就是一个专门负责处理登录请求的独立的 Web 服务】
  2. 用户统一在认证中心进行登录,登录成功后,认证中心记录用户的登录状态,并将 Token 写入 Cookie。(注意这个 Cookie 是认证中心的,应用系统是访问不到的)。
  3. 应用系统检查当前请求有没有 Token
  4. 如果没有token或失效,说明用户在当前系统中尚未登录,那么就将页面跳转至认证中心进行登录。
    由于这个操作会将认证中心的 Cookie 自动带过去,因此,认证中心能够根据 Cookie 知道用户是否已经登录过了。如果认证中心发现用户尚未登录,则返回登录页面,等待用户登录。
  5. 如果发现用户已经登录过了,跳转回目标 URL ,并在跳转前生成一个 Token,拼接在目标 URL 的后面,回传给目标应用系统。
  6. 应用系统拿到 Token 之后,向认证中心确认下 Token 的合法性,防止用户伪造。
  7. 确认无误后,应用系统记录用户的登录状态,并将 Token 写入 Cookie,然后给本次访问放行。(这个 Cookie 是当前应用系统的,其他应用系统是访问不到的)
  8. 当用户再次访问当前应用系统时,就会自动带上这个 Token,应用系统验证 Token 发现用户已登录。

退出登录:
某个产品 c.com 退出登录时

  1. 清空 c.com 中的登录态 Cookie。
  2. 请求认证中心 sso.com 中的退出 api。
  3. 认证中心遍历下发过 ticket(token) 的所有产品,并调用对应的退出 api,销毁局部会话,完成退出。
  4. sso认证中心引导用户至登录页面

此种实现方式相对复杂,支持跨域,扩展性好,是单点登录的标准做法。

  • 6
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值