让Cas单点登录系统在移动端,PC端,javaweb以及前后端分离等场景下适用

您所在的位置:网站首页 如何实现单点登录java 让Cas单点登录系统在移动端,PC端,javaweb以及前后端分离等场景下适用

让Cas单点登录系统在移动端,PC端,javaweb以及前后端分离等场景下适用

2023-08-20 04:33| 来源: 网络整理| 查看: 265

说在前面:本来的cas单点登录系统是专门为javaweb所开发的,所以在支持javaweb,这样说好别扭,还是直接用Jsp代替吧,也就是说,我们在jsp方面是基本不用做太大改动的,需要修改认证方式,以及需要验证票据等为数不多的修改。但是针对于其他方向,我们就该下一些功夫了,尤其是在html做的前后端分离的情况下

 

下面对每个场景做单独阐述

一、在jsp下场景的应用,这个时候我们需要修改handler、resolver,如果你是在http协议上工作的,那么一定要允许http才行,不然默认不支持单点登录,handler处理登录请求,我们可以支持多种方式,primary支持简单的在内存上做验证,Databasehandler是使用数据库的方式,另外还支持mongodb、memcached、redis等的验证方式,在这种方式下,我们要认识一个新朋友,就是springWebflow,以工作流的方式作为时间驱动,一步一步的进行单点登录验证以及tgt、st的处理。

 

二、支持移动端的认证方式,(Android、Ios)原理是一样的,我们都知道,移动端在本地是有一个小型的关系数据库,叫做sqllite,不过这个关系数据库比较小,就像一个文件夹似的内置,因为移动端本身并没有像我们web端的cookie机制,所以我们使用这个sqlite作为票据存储。

工作步骤如下

1、在手机端的登录页,提交用户名、密码至sso服务器

2、认证通过、返回tgt,然后本地存储这个tgt

3、请求st、并且以上一步请求到的tgt作为参数

4、sso服务器返回st

5、移动端访问业务系统,并且携带st作为参数

6、业务系统接收到请求,会向sso服务器校验st是否有效

7、若有效,则返回该用户信息,若无效,即此次登录无效

三、支持html方式,即前端以html的方式单独运行,后端只提供java接口调用

这种方式是比较恶心的,因为它无法使用webflow的方式,也无法像移动端那样有自己的本地存储,庆幸的是在web下我们还有cooike机制支持,所以我采用类似于移动端的方式,但是在后台多出一个借口,在html方式获取st的时候,使用了cookie方式获取tgt

 

1、在手机端的登录页,提交用户名、密码至sso服务器

2、认证通过、返回tgt,,并且在sso服务端设置response-header中cookie键值,以及路径存放路径,那么在下次请求时就可获取

3、直接请求st的另一个接口

4、sso服务器返回st

5、访问业务系统,并且携带st作为参数

6、业务系统接收到请求,会向sso服务器校验st是否有效

7、若有效,则返回该用户信息,若无效,即此次登录无效

以下是我整理的关于sso的热心网友问题和回复

1、这里的拦截器用什么实现比较好 filter和spring中HandlerInterceptorAdapter抽过类都可以,但是单点系统中后者少见,不是所有项目都有spring

2、单点登录的权限拦截能不能做到数据行级别 能实现,需要在拦截器中查询数据,那么每次都会查询,对系统性能浪费,拦截器只是拦截url,但是可以找替代方案,比如专门为该数据行提供一个接口,拦截此接口

3、是不是所有请求都要经过一下cas 你的意思应该是cas客户端拦截,不是所有的,可以自己配置拦截哪些url, CAS Authentication Filter org.jasig.cas.client.authentication.AuthenticationFilter CAS Authentication Filter /*

4、单点登录登录界面可否不在服务端实现 放在各自的客户端 可以,这种情况应该是静态分离的项目,主要问题是客户端如何与sso服务端建立会话,那么请求一定要打到sso服务端才可以写cookie,此时是跨域请求的,跨域两种解决方式1、jsonp2、服务端配置哪些接口允许跨域

问题5:如何管理统一认证服务器和各业务系统间的 session?

各业务系统与认证服务器之间的session是相互独立的,客户端请求到哪个域名下,服务端就可以拿到该域名下的cookie,然后获取session

问题6:怎么保证客户端 token 的安全性?@亥时 1、token只允许兑换一次,验证成功后销毁 2、经过加密的,避免出现规律 3、有的系统则是由两个token,缺一不可

问题7:基于加密cookie 的跨域sso如何实现跨域 跨域两种解决方式1、jsonp2、服务端配置哪些接口允许跨域,在filter中加入response.setHeader("Access-Control-Allow-Origin", "http://my.domain.cn");允许跨域的域名

1:请教老师:文中的全局会话和局部会话,局部会话是指的客户端和业务系统保持,局部会话是怎么产生?

是从认证中心生成一个局部token么? 局部会话由sso客户端创建,与sso服务端验证token成功后

2:请教老师:接1的问题,sso服务端和客户端,客户端怎么集成到业务系统,提供jar包?还是提供服务生成token?

提供jar包如果不是java开发的系统,那不就是sso整个就没用了。 java的是通过jar包,其他语言的也可以,因为sso服务端的接口都是基于http的

3:请教老师:“客户端与 SSO 验证 ticket 有效性,返回验证信息”这个验证是有什么规则么,用的是证书或者密钥验证? 客户端收到ticket后,会在服务端与sso服务端验证ticket正确性,可以是httpclient发起,也可以是dubbo等RPC接口

4: 请教老师:"final boolean wasGatewayed = this.gatewayStorage.hasGatewayedAlready(request, serviceUrl);" 客户端验证代码里面,这句我有点不太懂,这是在指网关的一些配置?可以说一下么?

配置是否使用网关认证,如果使用的话,将发送到sso服务端进行网关认证,一般不会用到

5:请教老师:看了第一个时序图,感觉非常清晰,CAS服务在整个过程中只会接受请求,给出响应,不会有业务逻辑的处理吧。CAS服务端为啥不直接在输入账号密码,登陆验证之后直接跳转到业务系统了,为啥还要返回到浏览器再让浏览器请求原始资源路径?

通用的话只验证用户密码,如果应用在项目上,还要有黑名单、冻结、防暴力破解等

6:请教老师:登陆过sso服务端之后,每次访问其它业务子系统都会生成一次临时会话令牌么?

首次会产生,局部会话建立以后就不会了

7:请教老师:淘宝的同步状态是同步一些什么信息,异步ajax请求么?

是,jsonp的

8:请教老师:对于小公司的SSO,老师有什么建议么,最近在弄这个sso,从来没接触过?

如果时间允许,弄清楚sso处理流程,自己动手写一个,后期改动升级灵活,自己也能提升,不建议直接拿cas用,但是可以借鉴cas的一些思想

sso-server的demo代码

https://github.com/lidongpengde/ssoserver,如果对您有用的话请给个小星星,代码比较简单,星星多了,我会继续升级维护



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3