1. 概述
三方异构系统通过中间页免登地址(地址中包含 v8 目标地址, 用户信息对应的随机值 code, 以及自定义参数)
登录的 v8 目标地址: 中间页免登地址中的 v8 目标地址
登录的 v8 系统的用户信息: 通过 中间页免登地址中的用户随机值 code 查询到的用户信息, 同时 v8 系统中也要存在的用户
2. 接入导图
说明:有三方系统免登进入V8
3. 接入步骤
3.1. Nacos配置【按需】
注意:需要再ctp-user微服务下 yaml 格式配置:
seeyon:
thirdauth:
clientId: xxx
clientSecret: xxx
properties 格式配置
seeyon.thirdauth.clientId=xxx
seeyon.thirdauth.clientSecret=xxx
3.3. 工程开发
开发过程请参考【场景/方法说明】
3.4. spi jar 打包并部署
参考 SPI扩展
配置完成后, 重启 ctp-user 服务
3.5. 测试方式
说明:免登地址拼接规则:
/oauth/avoid
?sydata={"c": "thirdavoid","w":"/main/portal","m":"/main-mobile/portal"} # 固定格式。 c的值:约定的唯一类型, w:web端重定向地址,m:手机端重定向地址
&a=a # 自定义参数 a
&b=b # 自定义参数 a
&... # 自定义参数... 随意增加, 最大不超过100个
3.6. 强制重新登录配置
通过免登地址,登录 A 账号查看待办, 后, 再打开 B 账号的待办, 默认不会切换账号, 可以通过下面配置, 强制重新登录。
解决方法: ctp-user nacos配置
yaml 格式配置:
seeyon:
avoid:
clearCookieTypes:
- cscc # 类型1
- pccscc # 类型2
properties 格式配置:
seeyon.avoid.clearCookieTypes[0]=cscc
seeyon.avoid.clearCookieTypes[1]=pccscc
4. 场景/方法说明
4.1. 从免登地址中获取信息(Request)
说明:上游系统在URL请求时,携带授权信息/加密用户信息,COP平台拦截信息并模拟登陆场景。
@Override
public CtpAvoidLoginUserInfoDto getUserInfo(CtpUserSpiAvoidLoginClientModeDto avoidLoginClientModeDto) {
// 所有 url 中追加的自定义参数, 都可以通过 extData 里获取
Map<String, String> extData = avoidLoginClientModeDto.getExtData();
// 通过 code 获取 token
// eg. String token = getTokenByCode(code);
// 通过 token 获取用户登录名
// eg. String loginName = getLoginNameByToken(token);
// // [按需实现] 免登成功后重定向地址, 如果不配置, 则默认跳转至打开免登时的目标地址
// CtpUserSpiRedirectUrlDto ctpUserSpiRedirectUrlDto = CtpUserSpiRedirectUrlDto.builder()
// .webRedirectUrl("/main/portal") // web 重定向地址
// .mobileRedirectUrl("/main-mobile/portal") // mobile 重定向地址
// .build();
// // [按需实现] 缓存免登后保存的三方 token
// CtpUserSpiThirdTokenDto ctpUserSpiThirdTokenDto = CtpUserSpiThirdTokenDto.builder()
// .thirdToken("xxx") // 待缓存的三方 token
// .expired(null) // 过期时间_秒
// .extData(new HashMap<>()) // 扩展参数
// .build();
// 返回用户信息、等缓存的三方认证 token、重定向地址
return CtpAvoidLoginUserInfoDto.builder()
// 用于登录的用户信息, 下面五个参数只选择一下赋值即可, 赋值的参数的值要与 v8系统中的对应的值一致
.thirdLoginName("zhangsan")
// .thirdUserId("123456")
// .thirdMobile("13900000001")
// .thirdUserEmail("abc@abc.com")
// .thirdUserCode("usercode")
//用于登录的用户信息, 上面五个参数只选择一下赋值即可
// [按需实现] 登录用户的租户信息
//.tenantType() // 租户数据类型:code / id
//.tenantData() // 与 tenantType 对应, 租户信息的值
// // [按需实现] 待缓存免登后保存的三方 token
// .ctpUserSpiThirdTokenDto(ctpUserSpiThirdTokenDto) // 三方认证 token
// [按需实现] 免登成功后重定向地址
//.ctpUserSpiRedirectUrlDto(ctpUserSpiRedirectUrlDto); // 免登成功后重定向地址
.build();
}
4.5. Nacos配置定义、获取值
说明:例如应用ID、秘钥、访问地址等跨环境需要变更参数,可以在nacos配置文件中维护
nacos位置:ctp-user
nacos参数值获取:需要通过工具类获取
CtpUserSpiUtils.getProperjavatyByName("seeyon.thirdavoid.clientId");
5. 注意事项
无