单点登录开发指南
变更记录
产品版本 | 更新内容 | 更新日期 |
v3.0 | 初始版本 | |
V6.0.2 | 增加isNeedSSOAuth4UserChange方法,支持同一个浏览器在不退出苍穹A账号的情况下切换登录B账号 | 2023年12月 |
1 场景
通过企业的统一认证中心的身份认证登录访问金蝶云苍穹系统,实现第三方系统单点登录苍穹系统。
2 适用版本
金蝶云苍穹V3.0.001 及以上
3 功能介绍
3.1 单点登录介绍
单点登录(Single Sign-On,简称SSO)是一种身份验证和授权机制,它允许用户使用一套账号密码登录访问多个相互信任的系统,实现对内部多个系统的统一访问控制,提高员工的工作效率和系统的安全性,降低企业管理和维护的成本。
3.1.1 实现机制
1)当用户第一次访问应用系统(金蝶云苍穹)的时候,因为还没有登录,会被引导到认证系统中进行登录;根据用户提供的登录信息,认证系统进行身份校验,如果通过校验,返回给用户一个认证的凭据。
2)用户从认证系统跳转到应用系统的时候,就会将这个认证的凭据带上,应用系统接受到请求之后会把认证的凭据通过接口传输给认证系统进行校验,检查认证的凭据的合法性。如果通过校验,用户就可以开始访问应用系统。
3.1.2 实现条件
实现SSO,需要以下主要的功能:
认证系统:用户进行登录认证;认证成功后,认证系统生成统一的认证凭据,返还给用户;认证系统对认证凭据进行校验,判断其有效性。
应用系统:通过与认证系统的对接,将用户的认证凭据传输到认证系统进行认证,从而实现对认证凭据进行识别和获取用户信息,返回认证结果从而完成单点登录的功能。
SSO插件:现场二开编写插件实现上述应用系统对接认证系统的功能,开发文档参考单点登录插件开发说明。
3.2 单点登录插件开发说明
SSO插件开发,实现kd.bos.login.thirdauth.ThirdSSOAuthHandler接口,重写 ThirdSSOAuthHandler接口的如下方法
callTrdSSOLogin方法实现用户没有登录的时候跳转认证中心的登录地址
getTrdSSOAuth实现苍穹调用认证系统的接口解析认证凭据返回用户信息,按数据格式返回认证结果
isNeedSSOAuth4UserChange实现同一个浏览器在不退出苍穹A账号的情况下切换登录B账号(此方法非必须,按需使用)
备注:代码开发工程需要引用bos-login -1.0.jar
3.2.1 重写 callTrdSSOLogin方法
功能说明:该方法是用户没有登录的时候,需要跳转到认证中心的登录地址
示例:
/** *该方法是用户没有登录的时候,需要跳转到认证中心的登录地址 */ @Override public void callTrdSSOLogin(HttpServletRequest request, HttpServletResponse response, String backUrl) { //认证中心的登录地址 String loginUrl = “http://loginip/login.html; response.sendRedirect(loginUrl); }
参数 | 参数说明 |
request | 当前访问的HttpServletRequest对象 |
response | 当前访问的HttpServletResponse对象 |
backUrl | 回调地址,二开无需处理 |
参数说明
3.2.2 重写 getTrdSSOAuth方法
功能说明:实现苍穹调用认证系统的接口解析认证凭据返回用户信息,按数据格式返回认证结果
示例:
/** * 实现苍穹调用认证系统的接口解析认证凭据返回用户信息,按数据格式返回认证结果 */ @Override public UserAuthResult getTrdSSOAuth(HttpServletRequest request, HttpServletResponse response) { //返回的认证结果 UserAuthResult result=new UserAuthResult(); result.setSucess(false); //二开需自行实现下面逻辑,将用户的认证凭据传输到认证系统进行认证,从而实现对认证凭据进行识别和获取用户信息,request包含请求的认证凭据 String phone=SSODemo.getLoginPhone(request);//此逻辑需二开实现 if(phone!=null){ //当前返回类型手机,用户名,邮箱、工号 result.setUserType(UserProperType.Mobile); //用户信息标识 result.setUser(phone); result.setSucess(true); } return result; }
入参:参数说明
参数 | 参数说明 |
request | 当前访问的HttpServletRequest对象 |
response | 当前访问的HttpServletResponse对象 |
返回结果:UserAuthResult
属性 | 属性说明 |
succee | 认证是否成功,如果是返回true,否返回false。 |
userType | 返回用户的类型,支持手机、用户名、邮箱、工号,使用枚举类UserProperType。 |
user | 返回用户信息具体的值,如手机号、邮箱、用户名、工号。 |
3.2.3 重写方法 isNeedSSOAuth4UserChange
功能说明:实现同一个浏览器在不退出苍穹A账号的情况下切换登录B账号(此方法非必须,按需使用。如无切换登录账号需求,可以不实现)
示例:
/** * 是否需要SSO认证:此接口用作检查用户身份是否发生切换,默认不启用。如果SSO认证服务器需要在同一浏览器中做用户切换,则需要启用 * 注意: 如果写死为true,则每个请求都会与SSO认证服务器通信,所以需要根据约定的SSO回调请求参数标识, 来判定是否要进行认证 * * 使用示例: * String ticket = request.getParameter("ticket"); * if(StringUtils.isNotEmpty(ticket)){ * return true; * } * return false; * * @param request * @return */ default boolean isNeedSSOAuth4UserChange(HttpServletRequest request){ return false; }
3.3 单点登录插件部署
【重点注意】单点登录插件开发完成后,将插件部署在Web节点
3.4 单点登录集成步骤
3.4.1 SSO插件
提供苍穹的SSO插件全限定类名(插件现场开发,开发指导参考单点登录插件开发说明)
类名示例:kd.bos.xxx.xxx.DemoPlugin
3.4.2 MC配置SSO插件
1)登录MC系统。
2)进入租户列表页面,选择自己的租户进入页面。
3)禁用要配置SSO登录插件的数据中心。
4)双击数据中心进入,勾选第三方认证,并配置sso认证插件全限定类名。
5) 配置完成,启用数据中心,发布集群,重启苍穹系统。
6)输入苍穹系统地址,未登录情况下跳转认证系统登录页面,输入用户信息登录成功即可跳转进入金蝶云苍穹系统。
单点登录开发指南
本文2024-09-23 00:33:36发表“云苍穹知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-cangqiong-140243.html