sa-token/sa-token-doc/oauth2/oauth2-custom-api.md
2024-08-23 16:18:24 +08:00

105 lines
2.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# OAuth2-自定义 API 路由
---
### 方式一:修改全局变量
在之前的章节中,我们演示了如何搭建一个 OAuth2 认证中心:
``` java
/**
* Sa-Token-OAuth2 Server端 Controller
*/
@RestController
public class SaOAuth2ServerController {
// OAuth2-Server 端:处理所有 OAuth2 相关请求
@RequestMapping("/oauth2/*")
public Object request() {
return SaOAuth2ServerProcessor.instance.dister();
}
// ... 其它代码
}
```
这种写法集成简单但却不够灵活。例如获取 code 授权码地址只能是:`http://{host}:{port}/oauth2/authorize`如果我们想要自定义其API地址应该怎么做呢
打开 OAuth2 模块相关源码,有关 API 的设计都定义在:
[SaOAuth2Consts.java](https://gitee.com/dromara/sa-token/blob/master/sa-token-plugin/sa-token-oauth2/src/main/java/cn/dev33/satoken/oauth2/consts/SaOAuth2Consts.java)
中,我们可以对其进行二次修改。
例如,我们可以在 Main 方法启动类或者 OAuth2 配置方法中修改变量值:
``` java
// 配置 OAuth2 相关参数
@Autowired
private void configOAuth2Server(SaOAuth2ServerConfig oauth2Server) {
// 自定义API地址
SaOAuth2Consts.Api.authorize = "/oauth2/authorize2";
// ...
}
```
启动项目,统一认证地址就被我们修改成了:`http://{host}:{port}/oauth2/authorize2`
### 方式二:拆分路由入口
根据上述路由入口:`@RequestMapping("/oauth2/*")`,我们给它起一个合适的名字 —— 聚合式路由。
与之对应的,我们可以将其修改为拆分式路由:
``` java
/**
* Sa-Token-OAuth2 Server端 Controller
*/
@RestController
public class SaOAuth2ServerController {
// 模式一Code授权码 || 模式二:隐藏式
@RequestMapping("/oauth2/authorize")
public Object authorize() {
return SaOAuth2ServerProcessor.instance.authorize();
}
// 用户登录
@RequestMapping("/oauth2/doLogin")
public Object doLogin() {
return SaOAuth2ServerProcessor.instance.doLogin();
}
// 用户确认授权
@RequestMapping("/oauth2/doConfirm")
public Object doConfirm() {
return SaOAuth2ServerProcessor.instance.doConfirm();
}
// Code 换 Access-Token || 模式三:密码式
@RequestMapping("/oauth2/token")
public Object token() {
return SaOAuth2ServerProcessor.instance.token();
}
// Refresh-Token 刷新 Access-Token
@RequestMapping("/oauth2/refresh")
public Object refresh() {
return SaOAuth2ServerProcessor.instance.refresh();
}
// 回收 Access-Token
@RequestMapping("/oauth2/revoke")
public Object revoke() {
return SaOAuth2ServerProcessor.instance.revoke();
}
// 模式四:凭证式
@RequestMapping("/oauth2/client_token")
public Object clientToken() {
return SaOAuth2ServerProcessor.instance.clientToken();
}
}
```
拆分式路由 与 聚合式路由 在功能上完全等价,且提供了更为细致的路由管控。