单点登录随笔

 

公司子业务系统众多,想做集成,所以要求做一个统一的 登录验证.

园子里找了一些分享,虽然声称能解决跨域问题,localhost下运行没问题,一旦添加Host,就暴露出Cookie无法跨域问题.

代码只是demo,本着对原理性的解释原则,没有做过多设计层面的优化,后面将会移到 abp+extjs 中,并会做 签名验证和IP白名单等安全措施

这个看起来是一个共享Cookie的简单问题,但是做起来却很出乎意外,2天分析流程,代码却花了3天.

纵使我现在已经将其开发完成,但是我依然无法时刻保证能很清醒的认识它,并从头到尾有条不紊的叙述原因.

之所以会这样,是因为这如同一个圆形迷宫(多次多条件多场景多站点间的重定向),这样当你以为知道为什么要这么做时,却发现往往它是另外一个场景的轮回.越说越迷糊了

核心需求:同一台电脑上,一个SSO(单点登录)环境下的子站点被授权,该环境下其它子站点将也能被访问.一个子站点上做了注销,其它子站点也将被注销.

基本原理:回家自己带了钥匙(子站点Cookie[Token]),直接开门进入,没有钥匙开门,于是去你妈妈[SSO站点S-Cookie[token]]那里拿然后开门进入,

如果你妈妈也没有,那你要找配钥匙的重新生成新钥匙(用户名密码验证生成Cooke[Token])了.

看起来是不是很简单,但是需要注意的时候,Cookie是针对浏览求的,接口请求并不能操作Cookie,只有重定向到某个网站,才能对其进行操作.所以这个时候问题升级到了什么时候调用

接口,什么时候重定向,重定向需要传什么参,做什么处理.该在哪个系统做重定向.什么时候停止重定向.

以下是流程图,本来准备将流程图说明写上,后来发现越写越显得复杂.确实是只可意会不可言传的东西,索性不写,叨叨半天还不如跟踪调试配合图理解会更清晰.

 蓝色为子站点逻辑,绿色为SSO站点逻辑

Host配置:

127.0.0.1 authority123.com
127.0.0.1 suba12.com
127.0.0.1 subb.com

IIS对应域名配置

 

 代码下载:

链接: http://pan.baidu.com/s/1hrPN4dm 密码: bqfm

 

posted on 2017-03-01 16:30  斯普劳特【深圳】  阅读(114)  评论(0编辑  收藏  举报