单点登录随笔
公司子业务系统众多,想做集成,所以要求做一个统一的 登录验证.
园子里找了一些分享,虽然声称能解决跨域问题,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