单点登录实现

单点登录实现

个人理解 
 
web系统由单系统发展成多系统组成的应用群,复杂性应该由系统内部承担,而不是用户。无论web系统内部多么复杂,对用户而言,都是一个统一的整体,也就是说,用户访问web系统的整个应用群与访问单个系统一样,登录/注销只要一次就够了
http是无状态的 单个系统我们通常使用cookie来保存用户的身份认证信息。
如果多个系统cookie系统就要部署在一个顶级域名的子域名下
缺点
共享cookie的方式存在众多局限。首先,应用群域名得统一;其次,应用群各系统使用的技术(至少是web服务器)要相同,不然cookie的key值(tomcat为JSESSIONID)不同,无法维持会话,共享cookie的方式是无法实现跨语言技术平台登录的,比如java、php、.net系统之间;第三,cookie本身不安全。
 
加一层中间服务层(身份认证中心)
当子系统a 地址 www.testa.com 子系统b 地址 www.testb.com  子系统c  地址 www.testc.com
这个时候我们需要做单点登录  为了避免用户在每个站点都要登陆
我们加一层中间层 身份认证中心地址 www.validate.com
比如 新来一个员工 他需要使用到系统a b c 
当他第一次登陆 系统a的时候 系统a后台验证是否带有参数token 如果没有带参数token
1.重定向到 www.validate.com  ?url=www.testa.com身份认证中心站点
2.验证是否有cookie islogin  如果没有 则跳转到 www.validate.com /login?url=www.testa.com 并带上当前访问系统的url
3.用户在身份认证中心 输入账号密码提交到后台 验证通过 通过  
  (1).生成一个token(用于身份认证 比如随机数) 并保存到redis或者其他服务存储
  (2).将写入token写入cookie响应给客户端( 注意这个cookie是 验证中心 中间站点发 cookie)
  (3).响应重定向到 www.testa.com?token=“????”    a获得token 将它写入到自己的域的cookie
  (4).系统a 获得token  通过在redis中查找是否存储这个token 如果有 表示登陆成功
4.当这个用户再访问系统b
   (1)发现没有带着token  或者token失效 跳转到身份认证中心 www.validate.com ?url=www.testb.com( 注意 之前登陆 我们写入了一个cookie 所以这个cookie会一并提交到身份认证中心)
   (2)发现这个用户之前登陆了 并通过cookie 获得token  重定向 到参数url 并带上token www.testb.com?token='??'

不过现在的很多单点登录 多对应多个终端  cs bs  app等  纯web的单点登录 可以参考

 

转载于:https://www.cnblogs.com/LQBlog/p/6290454.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值