轻松搞定苍穹单点登录
1 业务场景介绍
单点登录(Single Sign On),简称为 SSO,是比较流行的企业业务整合的解决方案之一。SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统,用户在一个系统中退出登录,其他系统也同样会退出登录。听上去是不是有点抽象而又神奇,举个栗子你就明白了。
你开了家公司,前几年因为人少钱少,上了一套简单OA系统也够用,员工输入用户名密码就可以登录了;
后面几年公司逐渐成长了集团型企业。业务系统一个接一个的上,搞下来A、B、C、D…十几套系统,员工登入每个系统也都要输入账号密码,十分繁琐。这个时候,你想:能不能在一个系统输入账号密码就可以登录所有系统?
SSO单点登录应运而生,所有新技术的变革都是为因为人类想偷懒而产生的。
2 单点登录原理
下图为CAS Client和CAS Server认证过程原理图
3 苍穹实践方案
为实现苍穹和CAS Server之间的认证,我们开发了专门的SSO插件机制。目前常用的单点登录系统为耶鲁大学开发的Yale CAS,下面咱们就以Yale CAS Server为认证中心服务器举例,为大家讲述如何完成苍穹和CAS server的单点认证服务配置。
1、首先我们需要将SSO二开插件压缩包放到苍穹补丁仓库的客户目录下:
(二开插件压缩包链接: https://pan.yunzhijia.com/s/MTE5NzAwMiwwZmIw#/)
2、进入MC(苍穹管理中心)中对应的数据中心配置页面,配置二开插件。
路径:租户列表-租户-数据中心,在数据中心中,将登陆类型勾选上“第三方认证”,认证插件值为:kd.bos.login.cas.sso.Cas10SSO
3、将CAS Server证书(由企业CAS负责人制作)导入到苍穹的jdk,具体操作如下,
在cmd(win+R)输入以下命令:
keytool -import -keystore F:\jdk1.8\jre\lib\security\cacerts -file E:/keys/kdtest.crt -alias kdtest
初始密码:changeit
F:\jdk1.8为javahome,kdtest.crt为证书的名称
4、在公共配置方案页面下,找到login.properties目录下,配置CAS server地址。
名称和编码固定:cas.sso.ca10.loginurl ,值填写cas server的访问地址,例如下图中的https://www.kdtest.com:8443/cas
4 其他场景
在很多客户的应用场景中,客户已经拥有自己的单点登录服务器,同时在登录时有自己的特殊控制逻辑,这时候就可以参照以下步骤二开处理:
1、实现kd.bos.login.thirdauth.ThirdSSOAuthHandler接口,编写自己SSO登录插件
注意:实现ThirdSSOAuthHandler接口的包括3个方法:登录页面的跳转、登录返回、登录退出。具体例子如下:
Package demo; Import javax.servlet.http. HttpServletRequest; Import javax.servlet.http. HttpServletResponse; Import kd.bos.login.thirdauth.ThirdSSOAuthHandler; Import kd.bos.login.thirdauth.ThirdSSOAuthHandler Public class DEMOSSO implements ThirdSSOAuthHandler { /** *该方法是用户没有登录的时候插件需要转移到正确的登录地址 */ public void callTrdSSOLogin(HttpServletRequest request, HttpServletResponse response, String backUrl) { //用户需要登录的地址 String loginUrl = “http://loginip/login.html; try { response.sendRedirect(loginUrl); } catch (IOException e) { e.printStackTrace(); } } /** * 该方法实现第三发插件认证及认证结果的返回 */ @Override public UserAuthResult getTrdSSOAuth(HttpServletRequest request, HttpServletResponse response) { // TODO Auto-generated method stub UserAuthResult result=new UserAuthResult(); result.setSucess(false); //这里编写自己的登录逻辑,判断是否登陆成功,并填写正确的返回类型和返回值 String phone=SSOPluginsUtil.getLoginPhone(request); If(phone!=null){ //当前返回类型手机,用户名,email,工号 result.setUserType(UserProperType.Mobile); result.setUser(phone); result.setSucess(true); } return result; } /** * SSO 登出逻辑,退出成功,返回true,不需要在sso插件中处理可以不用实现 */ Boolean processLogoutLogic(HttpServletRequest servletRequest){ }
轻松搞定苍穹单点登录
本文2024-09-23 00:35:12发表“云苍穹知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-cangqiong-140421.html