kawhii / sso

cas单点登录系统,其中包括cas认证服务,配置中心,监控平台,服务管理的高可用项目
https://kawhii.github.io/sso
MIT License
937 stars 428 forks source link

登录界面在Client客户端实现SSO(需求) #53

Open X-rapido opened 6 years ago

X-rapido commented 6 years ago

关于问题报描述

楼主你好,您的文章教程非常的赞,小弟收获良多,目前有如下需求,您看能不能帮忙给出一个好的解决方案,非常感谢。

需求描述

目前有6个单独的子项目A、B、C、D、E、F,都有各自的客户端登录界面(6个),现在要实现SSO效果,所以加上了一个CAS-Server服务

我想实现的效果是:登陆界面还是在客户端(不是在Server端增加主题登录界面方式)实现【同域名、不同域名】之间的SSO

举例: 1、当我访问子项目 A 的受保护资源时,跳转到 A 的登录界面。(其他子项目同理) 2、子项目 A 登录界面输入用户名,密码实现 CAS登录成功。 3、当我访问任意子项目(B、C、D、E、F)的受保护资源时,用于 A 已经登录过了,所以可以直接访问 4、当我在任意子项目(B、C、D、E、F)登出时,全局实现登出效果。

业务场景

由于项目众多,很难在CAS服务端以增加修改主题的方式来实现SSO,协同起来也不是很方便, 例如:天猫、淘宝、1688、淘宝联盟等项目。页面风格不同,但是最终页面提交的地址一样。假设修改天猫的登录页面,我想也不是在服务器端来修改主题,然后重新部署,这样肯定会对其他子项目登录有所影响。(仅仅假设) 所以希望在各自子项目中修改登录方式来实现单点登录。

项目环境

CAS Server:5.2.2 CAS Client:3.5.0

其他:Maven/Gradle、IDEA、Tomcat

小弟QQ:1056856191

kawhii commented 6 years ago

由于最近比较忙,没来得及处理问题,望谅解。 我给出的建议可以是这样:

  1. org.jasig.cas.client.authentication.AuthenticationFilter下的属性casServerLoginUrl配置为客户端的登录地址
  2. 客户端登录页用iframe嵌套这cas的登录页,但service路径要处理好,也就是需要把该参数给到iframe的路径中
  3. 当在客户端登录后,也就是在cas的中登录成功后302回top页面,这个需要特殊处理

需解决问题:

  1. cas的iframe嵌套需要允许否则不能打开
  2. 302回客户单需要对iframe进行处理否则还停留在iframe中
X-rapido commented 6 years ago

@kawhii 楼主好,根据您提出的方案我们在上周做了相关尝试,如果子系统A,B,C没有经过前后端分离,使用Iframe这种方式还是可以的。

另外看到有关JWT的方式,请问下大哥有没有好的思路或Demo来实现多项目之间SSO效果。这样,就可以不使用Iframe嵌套方式了。

我自己看了下官网,流程图是可以看明白的,但是在代码编写上,通过RestAPI方式获取到CAS自动产生的JWT字符串之后,不太明白接下来该怎么操作了,比如Client怎么来验证JWT正确性。

您若有时间可以随时跟我沟通,非常感谢。

参考文章 1、https://apereo.github.io/cas/5.2.x/installation/Configure-ServiceTicket-JWT.html 2、http://blog.csdn.net/cuo9958/article/details/53580466