CAS时序图
image.png
具体流程:
1.用户访问app系统,app系统是需要登录的,但用户现在没有登录。 2.跳转到CAS server,即SSO登录系统,后续图中的CAS Server统一叫做SSO系统。SSO系统也没有登录,弹出用户登录页。 3.用户填写用户名、密码,SSO系统进行认证后,将登录状态写入SSO的session,浏览器(Browser)中写入SSO域下的Cookie。 4.SSO系统登录完成后会生成一个ST(Service Ticket),然后跳转到app系统,同时将ST作为参数传递给app系统。 5.app系统拿到ST后,从后台向SSO发送请求,验证ST是否有效。 6.验证通过后,app系统将登录状态写入session并设置app域下的Cookie。 至此,跨域单点登录就完成了。以后我们再访问app系统时,app就是登录的。
访问app2系统时的流程:
1.用户访问app2系统,app2系统没有登录,跳转到SSO。 2.由于SSO已经登录了,不需要重新登录认证。 3.SSO生成ST,浏览器跳转到app2系统,并将ST作为参数传递给app2。 4.app2拿到ST,后台访问SSO,验证ST是否有效。 5.验证成功后,app2将登录状态写入session,并在app2域下写入Cookie。 这样,app2系统不需要走登录流程,就已经是登录了。SSO,app和app2在不同的域,它们之间的session不共享也是没问题的。
CAS登录认证方式
1.JDBC认证
CAS Server可以直接访问数据库,通过一定的配置,直接进行用户名和密码的校验。
2. REST认证
2.1什么是Rest认证?
cas服务端通过调用其他服务接口,将用户名和密码传过去进行认证。这就是rest认证。
2.2什么情况下需要用到Rest认证?
在不允许cas服务直接访问账号数据库的时候,这个时候就需要用到Rest认证。
2.3具体参考官网
https://apereo.github.io/cas/5.3.x/installation/Rest-Authentication.html
2.4流程介绍
当用户点击登录后,cas会发送post请求到http://rest.cas.com:8083/login并且把用户信息以"用户名:密码"进行Base64编码放在authorization请求头中。
若输入用户名密码为:admin/123456;那么请求头包括:
authorization=Basic Base64(admin MD5(123456))
那么发送后客户端必须响应一下数据,cas明确规定如下:
代码语言:javascript复制● cas 服务端会通过post请求,并且把用户信息以”用户名:密码”进行Base64编码放在authorization请求头中
● 200状态码:并且格式为
{“@class”:”org.apereo.cas.authentication.principal.SimplePrincipal”,”id”:”casuser”,”attributes”:{}}是成功的
● 403状态码:用户不可用
● 404状态码:账号不存在
● 423状态码:账户被锁定
● 428状态码:过期
● 其他登录失败