1. 运营配置

1.1 网页端第三方登录配置

1.1.1 新增网页端第三方登录

主要用于配置第三方相关信息

登录运营中心 -> 实施配置 -> 系统配置 -> 登录配置

注意:配置完一定要启用

参数名称 参数说明 是否必填 示例
标识 第三方标识,用于 alipay
标题 用于页面展示 支付宝登录
示例图 用于页面展示
跳转地址 用于页面跳转 https://openauth.alipay.com/oauth2/publicAppAuthorize.htm
业务类型 登录、业务、公众号等 登录
设备类型 网页端、移动端 网页端
响应地址 预留字段(特定场景)
应用id 第三方应用id test
公钥 第三方公钥 123
私钥(应用密钥) 第三方密钥 456

启用后的第三方登录配置会出现在下面的系统配置中,由系统配置控制是否出现在登录页中

1.2 移动端第三方登录配置

1.2.1 新增移动端第三方登录

注意:配置完一定要启用

参数名称 参数说明 是否必填 示例
标识 第三方标识,用于 alipay
标题 用于页面展示 支付宝登录
示例图 用于页面展示
跳转地址 用于页面跳转(移动端暂时没有使用到)
业务类型 登录、业务、公众号等 登录
设备类型 网页端、移动端 移动端
响应地址 预留字段(特定场景,移动端暂时没有使用到)
应用id 第三方应用id test
公钥 第三方公钥 123
私钥(应用密钥) 第三方密钥 456

1.3 系统配置

1.3.1 自定义登录页第三方登录

开始说明此配置之前,请确保已经完成上面的第三方配置操作

登录运营中心 -> 实施配置 -> 系统配置 -> 登录配置

选择对应的登录方式,开启第三方登录,点击保存按钮

刷新登录页

可以看到登录页出现了,支付宝、微信、玉湖单点登录按钮。

自动跳转方式

只要配置了自动跳转,下次打开登录页会自动重定向到对应的第三方登录页面。

1.3.2 自定义注销登录

此配置仅对工作台、控制台的注销登录生效。

登录运营中心 -> 实施配置 -> 系统配置 -> 控制/工作台

默认注销登录的标题为注销登录

打开启用开关,修改标题为退出登录

刷新控制台/工作台页面,标题修改成功

注销登录地址配置后,刷新控制台/工作台页面,点击退出登录按钮会先注销当前登录用户信息,再跳转至指定的地址。

2. 开发接入

2.1 定义一个中间工程

中间工程的作用在于封装第三方系统登录各种调用逻辑,暴露通用的接口放到中台进行配置。主要暴露以下接口:

2.1.1 登录跳转接口

通过nacos等其它方式配置第三方的授权信息,最好支持动态刷新。拼接好第三方登录的url,然后进行重定向。

接口接收参数:

参数名称 参数说明 示例 是否必填 参数名是否强制
platform 第三方平台类型(第三方平台标识),后续用于运营配置 alipay 否,可随意更改
state 业务参数,如果从中台登录页跳转则会传递该参数,非登录页跳转可不传 -

接口示例:

    @GetMapping("/login/{platform}")
    public void ssoLogin(@PathVariable String platform, String state, HttpServletResponse response) {
        ssoHandler.ssoLogin(platform, state, response);
    }

2.1.2 接收第三方回调的接口

一般第三方都采用授权码的方式。可采用接收授权码、根据不同平台类型调用不同的逻辑解析code从而得到openId(用户唯一标识),得到openId后跳转至中台登录页。

接口接收参数:

参数名称 参数说明 示例 是否必填 参数名是否强制
platform 第三方平台类型(第三方平台标识),后续用于运营配置 alipay 否,可随意更改
state 中台业务参数,中台登录页跳转会传递该参数 - 否,根据第三方回调的参数名定义
code 第三方回调授权码 - 否,根据第三方回调的参数名定义

接口示例:

    @GetMapping("{platform}")
    public void sso(@PathVariable String platform, String code, String state, HttpServletResponse response) throws IOException {
        //解析code,并重定向
        ssoHandler.sso(platform, code, state, response);
    }

重定向参数:

参数名称 参数说明 示例 是否必填 参数名是否强制
openId md5(第三方用户唯一标识) -
type workbench:工作台 ,console:控制台 -
state 如果从中台登录页跳转,则对应登录跳转的state参数。否则则需要调用内部接口获取 -

重定向地址:

域名/auth/?openId=md5(第三方用户唯一标识)&type=workbench&state=业务参数

重定向示例:

    public void sso(String platform, String code, String state, HttpServletResponse response) throws IOException {
        //md5(第三方用户唯一标识)
        String openId = getOpenId(platform, code, state);
        if (CharSequenceUtil.isBlank(openId)) {
            throw new XLinkBizException(ERR_4000);
        }
        //如果从中台登录页跳转,则对应登录跳转的state参数。否则则需要调用内部接口获取
        //String paiState = getPaiState(platform);

        String url = CharSequenceUtil.format("{}/auth/?openId={}&type={}&state={}", domainConfig.getAddress(), openId,
                "workbench", state);
        //模块跳转
        StaticLog.info("===>> RedirectUrl:{}", url);
        response.sendRedirect(url);
    }

内部接口获取state

    @Resource
    private IAuthCoreService authCoreService;

    public String getPaiState(String platform) {
        Reply<String> reply = authCoreService.getAuthorizeState(platform, "workbench");
        return reply.getData();
    }

2.1.3 退出登录接口

定义一个退出登录接口,调用第三方注销登录逻辑或者进行重定向

接口接收参数:

参数名称 参数说明 示例 是否必填 参数名是否强制
platform 第三方平台类型(第三方平台标识),后续用于运营配置 alipay 否,可随意更改

接口示例:

    @GetMapping("/logout/{platform}")
    public void logout(@PathVariable String platform, HttpServletResponse response) {
        ssoHandler.logout(platform, response);
    }

2.2 移动端接入

参考
移动端H5第三方登录接入

3 工程代码

文档更新时间: 2024-04-19 10:38   作者:伍润源