这是本节的多页打印视图。 点击此处打印.

返回本页常规视图.

免登-中间页扩展模式

支持三方异构系统免登进入COP平台SPI扩展能力。支持免登地址中携带自定义参数

1. 概述

三方异构系统通过中间页免登地址(地址中包含 v8 目标地址, 用户信息对应的随机值 code, 以及自定义参数)

登录的 v8 目标地址: 中间页免登地址中的 v8 目标地址

登录的 v8 系统的用户信息: 通过 中间页免登地址中的用户随机值 code 查询到的用户信息, 同时 v8 系统中也要存在的用户

2. 接入导图

说明:有三方系统免登进入V8

1720767916820

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. 注意事项