@15311494814
2018-04-13T07:30:36.000000Z
字数 3150
阅读 2008
avatar
SSO
就是Single Sign On的缩写,也就是“单点登录”,主要解决的问题是用户在某一子系统登录后能够漫游其他系统
CAS
是Central Authentication Service的缩写,也就是“中央认证服务”,是一种将用户的权限判断集中管理的思想。
sso是管理账户信息的总入口,所有子系统的登录和登出都通过sso进行授权,子系统不处理用户账户问题。
avatar同样受到sso的授权影响,但是sso的账户数据是avatar来进行维护的,彼此相辅相成。
浏览器端
:发出请求,收到结果,显示结果[]
子系统端
: 查看用户是否登录,登录返回结果,没登录重定向到cas server,server进行登录认证后回调回子系统,通过返回的url中携带参数ticket来捕获server颁发的ticket, 获取到ticket后调用server的validate接口验证ticket有效性,有效则server返回用户的信息。
cas server端获取ticket
:子系统重定向到server的login页面,在访问login之前server的过滤器拦截该请求,同时获取用户浏览器中存在cookie中的tgc,如果不存在则转到登录表单页面,如果存在则验证tgc有效,有效则根据tgt生成新的ticket,无效则转到登录页面
当用户登录后,在server本地记录用户的信息(tgt),同时在用户浏览器设置cookie(tgc),生成ticket,通过子系统传来的回调地址进行重定向,并在url中携带参数ticket。
cas server端验证ticket
: 验证通过返回用户信息,失败返回报错信息
统一登出
: 子系统调用server端的logout接口或者直接在cas server进行登出,当server登出后,会清除掉登出用户对应的tgt,并根据service记录(service为子系统的回调地址),遍历向子系统发出登出请求(server端使用httpURLConnection),配置在子系统的cas client的filter会监听到server端的logout请求,来进行session的销毁和tgc的清除。
RESTFUL
虽然cas不能直接支持前后端分离的模式,但是提供了完整的 restful login api,经过研究后发现,restful 调用会直接获取到tgt,cas 本意是获取到tgt自行处理,但对于web端前后端分离的模式,直接处理tgt并保持与其他项目的同步登陆登出的兼容需要单独开发,于是此方式放弃掉。SESSION
前后端分离需要保持session的一致性,由于交互时默认会生成新的session,虽然可以通过ajax的属性配置保持sessionid的一致,但是不是根本的解决办法,由于cas server设置cookie是根据请求地址的域名来存储,在开发的时候前后端是两个server,虽然上线时可以合并为一个server,但也不是根本的解决办法,另外前端还需要一致记录后端的sessid,此方式也弃用掉。TOKEN
市场上通用的做法是基于token的模式,通过token来进行交互,cas server中的tickert也是此模式,前后端的用户状态验证一定是使用token来进行验证,前端携带token访问后台,后台验证token来获取用户信息,所有还是要使用此模式来解决cas 的问题。后端依旧进行所有的cas server交互和存储session, 并在登录后生成signature回调给前端调用。
前端->后端->cas server->后端->前端
前端获取signature流程:
cas 整合jira的原型已经测试成功,详情请见 cas整合jira演示说明
confulence未进行原型测试,相关配置是相同的。
cas 整合jira的安装步骤见 cas整合jira安装教程 ,其中jira版本为7.8.0 ,cas版本为5.2.7