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);
}