# Sa-Token-OAuth2整合-常见问题总结

OAuth2 集成常见问题整理

[[toc]]

--- 


### 问：搭建好 oauth2-server 服务后，访问返回：`{"msg": "not handle"}`。

返回这个信息，代表你访问的路由有错误，比如说：

- 统一认证登录地址是：`http://{host}:{port}/oauth2/authorize`。
- 而你访问的却是：`http://{host}:{port}/oauth2/authorize2`。

地址写错了，框架就不会处理这个请求，会直接返回 `{"msg": "not handle"}`，所有开放地址可参考：[OAuth2 开放接口](/oauth2/oauth2-apidoc)

如果仔细检查地址后没有写错，却依然返回了这个信息，那有可能是对应的接口没有打开，比如说：

- sso-server 端的单点注销地址：`http://{host}:{port}/sso/signout`；
- sso-client 端的注销地址：`http://{host}:{port}/sso/logout`；

都需要在配置文件配置：`sa-token.sso.is-slo=true`后，才会打开。



### 问：我参照文档搭建 oauth2-server，一直提示：code 无效，请问怎么回事？
一个 code 码只能使用一次，多次使用就会报这个错。



### 问：Sa-Token-OAuth2 怎么集成多账号模式？

在 `configOAuth2Server` 里指定 oauth2 模块使用的 `StpLogic` 对象即可： 

``` java
// Sa-Token OAuth2 定制化配置
@Autowired
public void configOAuth2Server(SaOAuth2ServerConfig oauth2Server) {
	// 其它配置 ... 
	
	// 指定 oauth2 模块使用的 `StpLogic` 对象 
	SaOAuth2Manager.setStpLogic(StpUserUtil.stpLogic);
}
```




### 问：授权码流程中 state 参数是干吗用的？

state 参数用于验证授权码流程的发起端和接受端是否为同一个客户端，以防止OAuth-Server账号伪装攻击。

授权流程发起端必须保证：
- state 参数必须足够随机，不可被预测。
- state 参数与授权码流程发起客户端 一 一 对 应，授权流程发起时创建的 state 必须与接受时返回的 state 值一致。
- 安全起见，一个 state 参数只允许使用一次。

