All checks were successful
Publish to Confluence / confluence (push) Successful in 41s
3.4 KiB
3.4 KiB
单点登录使用说明
快速使用
开放授权登录端点
需要开放的端点列表:
-
/oauth/authorize/{client}
-
/oauth/login/{client}
-
其中
{client}
为变量,所以 需要匹配开放/oauth/authorize
及/oauth/login
下的所有路径 -
或者如果可以确定
{client}
, 则开放替换{client}
后的链接
编写 OauthLoginHandler 实现
- 编写
OauthLoginHandler
实现登录流程,并注入Bean
- 示例:
import com.alibaba.fastjson.JSONObject;
public class DefaultOauthLoginHandler implements OauthLoginHandler {
@Override
public Serializable loginSuccessHandle(AuthUser authUser,
YuanMengOauthProperties.OauthProperties oauthProperties) {
// TODO 获取用户名
String username = authUser.getUsername();
// TODO 查询用户
User user = xxxDao.selectUserByUsername(username);
// TODO 业务登录逻辑
String token = xxxLoginService.login(user);
// TODO 组装登录结果
JSONObject loginResult = new JSONObject();
loginResult.put("token", token);
// 返回结果
return loginResult;
}
}
配置文件配置
yuanmeng:
starter:
oauth:
config-map:
#- 自定义 {client}
customClient:
#- idp 类型
auth-source: KEYCLOAK
#- Keycloak 客户端ID
client-id: "xxx"
#- Keycloak 客户端Secret
client-secret: "secret"
scopes:
- openid
- profile
- email
#- 某个界面或者直接请求该服务后端接口:http://xxx/oauth/login/{client}
#- 这边的 {client} 为 customClient
redirect-uri: "某个界面或者直接:http://xxx/oauth/login/customClient"
#- 当 redirect-uri 配置为后端接口时需要配置,
#- 登录成功后会把登录结果拼接到这个链接后面进行跳转
#- 配置后请求 login 接口会根据这个链接做跳转,如果 redirect-uri 有页面承接这边就不需要配置
login-after-redirect-uri: ""
前端处理
方案一:授权承接界面
- 前端添加一个界面来做跳转界面,并把界面链接配置到
redirect-uri
上 - 跳转界面将路径接收到的参数通过登录链接进行后端
GET
请求。例如GET http://xxx/oauth/login/{client}
- 请求结果为登录信息,根据请求结果做对应处理就行
方案二:登录成功处理界面
- 后端直接把
redirect-uri
配置为登录接口http://xxx/oauth/login/{client}
- 前端给一个可以承接登录成功信息处理的界面
- 后端将页面链接配置到
login-after-redirect-uri
中 - 前端在页面中解析对应登录信息进行处理