SSO单点登录

概念

  • SSO(Single Sign On),在分布式架构中,用户只需登录一次,就可访问其他相关的系统。比如登录百度贴吧后,再去访问百度网盘就不需要登录了。

实现方式

session广播机制

  • 用户第一次在任何一个模块登录时,用session广播机制把session复制到其他模块

  • 用户再次登录其他模块时,就可直接本模块中的session判断用户是否登录

  • 缺点:复制session,占用很大资源,一般不使用

cookie+redis

  • 用户第一次在任何一个模块登录时

    • 在redis中存入key为唯一随机值(自定义规则),value为用户数据

    • 在cookie中存入在redis中生成的key

  • 用户再次登录其他模块时,发送请求时会带着cookie进行发送,用此cookie到redis中进行查询;若查询出数据表示已登录,若没有数据表示要重新登录

token

  • 用户第一次在任何一个模块登录时,按照自定义的规则(盐值)生成字符串token,把token返回给前端存入cookie或者存入地址栏

  • 用户再次登录其他模块时,每次访问用cookie带着token或者在地址栏中带着token,后端可根据发送来的token判断是否登陆

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
当用户第一次访问web应用系统1的时候,因为还没有登录,会被引导到认证中心进行登录;根据用户提供的登录信息,认证系统进行身份效验,如果通过效验,返回给用户一个认证的凭据;用户再访问别的web应用的时候就会将这个Token带上,作为自己认证的凭据,应用系统接受到请求之后会把Token送到认证中心进行效验,检查Token的合法性。如果通过效验,用户就可以在不用再次登录的情况下访问应用系统2和应用系统3了。所有应用系统共享一个身份认证系统。认证系统的主要功能是将用户的登录信息和用户信息库相比较,对用户进行登录认证;认证成功后,认证系统应该生成统一的认证标志,返还给用户。另外,认证系统还应该对Token进行效验,判断其有效性。 所有应用系统能够识别和提取Token信息要实现SSO的功能,让用户只登录一次,就必须让应用系统能够识别已经登录过的用户。应用系统应该能对Token进行识别和提取,通过与认证系统的通讯,能自动判断当前用户是否登录过,从而完成单点登录的功能。 比如说,我现在有3个分站点和1个认证中心(总站)。当用户访问分站点的时候,分站点会发Token到验证中心进行验证。验证中心判断用户是否已经登录。如果未登录,则返回到验证中心登录入口进行登录,否之则返回Token验证到分站点,直接进入分站点

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值