单点登录

git地址    https://github.com/zhaoyuasd/loginCenter.git

总结:

单点登录 主要是使用 http的重定向技术 每次登录时 会将此次的请求 转发到 登录中心,登录中心 根据携带的cookie或者其他参数 获取用户信息 如果没有 就验证用户信息, 然后生成token或者cookie 同时 返回转发的状态码 让其携带对应的参数转发到之前登录的 服务器 对应的服务器 根据其携带的token 去登录服务进行用户信息验证 并获取用户信息 将用户信息存储到 当前线程 并将这个token写入到 该服务的cookie中 不用每次请求登录服务器 就这么个原理 画图展示下

如图 某个用户通过浏览器 登录www.zy.com 经理的步骤如下:

1. 用户在登录页面 将用户名 密码提交给www.zy.com 进行登录 比如最后的请求类似 www.zy.com?userName=zy&password=749645654

 

2. 应用端返回状态码 304 并返回对应的链接

www.zylogin.com?userName=zy&password=749645654&url= www.zy.com

 

3. 浏览器 根据根据2的响应 去访问登录中心 并携带对应的用户名密码(这里应该会经过处理 不会是原文 明文)

 

4. 登录中心验证用户的合法性 验证合法后(不合法也应该有一套规则 这里先不管) 生成对应的 token或者 cookie回传给浏览器(这个是为了给其他应用重定向用的) 同时返回状态码 304 以及对应跳转 url 比如这个 www.zy.com?token=Aadaderfsdg44RTEEW

 

5. 浏览器再次去请求应用服务 根据返回的 www.zy.com?token=Aadaderfsdg44RTEEW

 

6. 浏览器根据携带的token去请求登录中心 请求用户信息(这里可能过期什么的)

 

7. 登录中心验证token合法后 返回给应用用户信息

 

8. 浏览器将自己cookie 或者token返回给浏览器(可以直接返回之前那个token 或者做个处理 和这个token 对应起来 然后把用户信息 缓存一些 不要每次走 登录中心) ,进入主页。

 

以上就是基本的登录流程了 这里还有很多细节需要商榷

比如 用户信息错误,过期时间,应用缓存的用户信息是否一直可用等等,具体到应用上还会有别的问题 这个就要具体分析了 不过流程是上面那样的 其中上面的第4步 是实现单点登录的核心

 

下面再看一张图:

这图的前提假设是 www.zy2.com 和上面的 www.zy.com 属于同一个单点登录系统 同时公用一个登录中心 另外还有一个前提是

在同一个浏览器 用户已经登录了 www.zy.com 接下来 通过在地址栏输入网址 要进入 www.zy2.com(以前我一直搞不懂 这里怎么就获取到 用户信息了)以下是每一步的解析

1. 用户在浏览器输入地址 www.zy2.com 然后点击enter

 

2. 同样地 web服务返回304 同时返回跳转地址www.zylogin.com?url= www.zy.com

不过这一次没有用户信息

 

3. 浏览器去访问登录中心 这个时候就要注意了 在上一步中 我们访问过登录中心 同时返回了 www.zylogin.com的cookie(或者token) (浏览器对cookie管理有自己的一套机制 在服务端主要涉计domain 和path属性的设置,这个先不细说) ,这个时候在跳转的时候 会携带上这个cookie (这里可以说是 单点登录最核心的东西了 利用了浏览器自己的机制)

 

// 下面步骤 就几乎个面的一致了

4. 登录中心验证cookie 如果是合法 或者信息没有过期什么的 然后返回给浏览器

304 以及对应的 跳转url 比如 www.zy2.comuserName=zy&password=749645654

 

5. 浏览器再次携带cookie 去访问 web应用

 

6. web应用根据cookie去登录中心 访问 获取用户信息

 

7. 登录中心 返回给web应用用户的信息

 

8. 响应浏览器 应用主页

 

 

大致流程应该是这样了 说到底 其实就用了一个304和 cookie 毕竟客户端只有浏览器 需要利用他的一些机制上的特性 这个我上面的这个版本 应该是目前使用的 之前也有其他的版本 但是有这样或者那样的安全隐患 这个应该是比较安全的

 

同时这里也有很多 需要定制化的细节 说几个我想到的

1. 登录中心的 白名单限制 不是什么服务都可以网这里跳的 不然炸了

2. 登录的时候 跳转时携带的 用户名密码 以及 最后返回的 token 加密处理的问题

是使用单一的加密 还是 不同的web应用不同的规则

3. web应用的cookie使用 在一次登录完成之后 web应用应该将cookie回传给浏览器

这个cookie是使用原生的登录中心的token 还是自己加密处理 同时本地缓存的用户信息 如何与登录中心 保持一致 什么时候刷新

4. 登出处理 用户登录了两个系统 退出其中一个 另一个怎么办 在登录中心需要对饮的处理,以及登出后 再次登录 是否需要账号密码。。

 

5. 对与登录中心 针对每一个应用 cookie或者token 过期刷新处理问题

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值