统一登陆认证平台设计
应用场景
具体是酱紫的,公司内部搞了好多单独的应用系统,比如考核、wiki、OA、git服务、项目管理...好多好多用户名密码需要记哦...忘了肿么办呀!这时候就想啊!能不能搞个统一认证的平台[后面简称UAS],登陆这个平台后直接从这个平台获得其他平台的权限,然后就可以直接免登陆访问啦!想想就有点小激动。
最简单粗暴的方案
UAS关联存储其他各系统用户名密码,跳转链接直接模拟一个登陆请求,取得子系统session后不就可以很愉快的访问了么!
那么问题来了:
- 直接把用户名密码交给其他系统维护,总感觉有点危险,毕竟有第三个人知道密码了嘛!
- 其他系统的相互跳转很难实现。
- 模拟登陆请求也是有一定的风险的
...反正密码让其他系统知道了就是不好。
基于token的无session认证
既然直接存储用户名密码很危险,那有木有神马东东阔以替代用户名密码捏。。。好像还真有,是不是只要生成一个无法伪造的密文来授权给授信机构就阔以捏。。。。
那么流程就会变成酱紫:
既然已经有了token串能够识别用户身份,那session又有什么卵用呢。。。。session还会无端的增加集群系统的复杂度。
那么流程再改改:
恩恩。。。看上去挺好。
至于浏览器请求怎么带上token,那就有好多方式了。
(1)作为get请求的参数,酱紫http://bbear.com.cn/abc?token=111111111111111111111
(2)restful格式,http://bbear.com.cn/111111111111111/abc
(3)跟这post一起提交
关联权限控制
后来,又接到一个需求,说登陆一次UAS,要能直接在全部有权限的系统直接跳转。有了上面那一票经验,我想这也是个小case吧!
流程如下:
那么。。。问题来了,返回给用户多个平台的认证token,用户浏览器肿么区别对待呢?去不同的url用不同的token捏?
我们是这么处理的,返回多个token是的时候,在用户浏览器置cookie,key就是用户需要请求的url,酱紫看起来就很优雅的解决了。。。。