24 sso

问题

sso是什么

答案

sso即Single Sign On,单点登录。我们先说登录,一个系统倘若不记录用户状态,就可以不用登录,那为什么要记录用户状态,我们用一个视频网站举例子。视频网站中包括谁上传了这个视频、谁播放了这个视频、播放了几次、最近这一次看到什么进度等等,这些信息每一个用户都不一样,所以我们要记录每一个用户的信息,这些信息保存在session,每个session都有一个唯一ID。所谓session是指一个用户登录到这个网站直到退出这个网站所经过的时间段,在这个时间段内session的ID不变也唯一,因此就不用重新登录,但当用户重新登录的时候session就会改变,因此我们需要把用户账号密码固化并与权限角色做好映射,从而就能做到无论用户在何时何地登录都能拥有之前存储好的权限。
根据上面的描述,账号密码保证了不同权限,session保证不用反复登录。但有一个问题,session只存在于某个servlet容器,如果我们把服务做成集群,则意味着我们要处理好session共享,而tomcat本身就提供了session共享机制。session共享要消耗时空资源才能完成数据一致化,所以tomcat集群规模不能大。因此,session共享能解决问题,但不是企业级别的解决方案。
企业级别的sso解决方案包括以下几种机制:

  • 基于redis和cookie的单点登录机制
  • shiro单点登录机制
  • cas单点登录解决方案
  • springsecurity+jwt单点登录机制
    上述单点登录机制都有一个共同特点在于将用户信息统一存储到独立模块,且只由该模块负责认证;同时在用户的请求中务必携带能标记该用户的信息。
    这里简述一下第一种方案:
    (1)用户输入账号密码验证成功
    (2)生成一个唯一id,将该id作为key,将用户信息【密码置空】作为value,存储到redis
    (3)将"USER_TOKEN"作为key,将第二步中的id值作为value,写回浏览器端cookie
    (4)跳转到另外一个服务的首页,在跳转过程中携带者cookie中的值USERTOKEN:id值
    (5)解析USERTOKEN:id值,通过该id值再去请求redis,获取之前存储的用户信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值