mirror of
https://gitee.com/dromara/sa-token.git
synced 2025-12-27 06:35:40 +08:00
109 lines
4.0 KiB
Markdown
109 lines
4.0 KiB
Markdown
# 匿名 Client 接入
|
||
|
||
匿名 Client 就是指在客户端没有配置 `sso-client` 的应用,没有一个明确的 “Client” 标识名称。
|
||
|
||
匿名 Client 在一些关键步骤中不会构建 `client` 参数,如:“重定向至认证中心授权地址”、“校验 ticket”、“单点注销” 等。
|
||
|
||
要想匿名 client 接入,你需要做一些特殊配置。
|
||
|
||
|
||
### 1、在 sso-server 端开启匿名 client 接入
|
||
|
||
开启方式一,通过配置项方式:
|
||
|
||
<!---------------------------- tabs:start ---------------------------->
|
||
<!------------- tab:yaml 风格 ------------->
|
||
``` yaml
|
||
# Sa-Token 配置
|
||
sa-token:
|
||
# SSO-Server 配置
|
||
sso-server:
|
||
# 是否启用匿名 client (开启匿名 client 后,允许客户端接入时不提交 client 参数)
|
||
allow-anon-client: true
|
||
# 所有允许的授权回调地址 (匿名 client 使用)
|
||
allow-url: "*"
|
||
# API 接口调用秘钥 (全局默认 + 匿名 client 使用)
|
||
secret-key: kQwIOrYvnXmSDkwEiFngrKidMcdrgKor
|
||
```
|
||
<!------------- tab:properties 风格 ------------->
|
||
``` properties
|
||
# SSO-Server 配置
|
||
# 是否启用匿名 client (开启匿名 client 后,允许客户端接入时不提交 client 参数)
|
||
sa-token.sso-server.allow-anon-client=true
|
||
# 所有允许的授权回调地址 (匿名 client 使用)
|
||
sa-token.sso-server.allow-url=*
|
||
# API 接口调用秘钥 (全局默认 + 匿名 client 使用)
|
||
sa-token.sso-server.secret-key=kQwIOrYvnXmSDkwEiFngrKidMcdrgKor
|
||
```
|
||
<!---------------------------- tabs:end ---------------------------->
|
||
|
||
|
||
开启方式二,通过代码重写方式:
|
||
|
||
``` java
|
||
/**
|
||
* 重写 SaSsoServerTemplate 部分方法,增强功能
|
||
*/
|
||
@Component
|
||
public class CustomSaSsoServerTemplate extends SaSsoServerTemplate {
|
||
|
||
/**
|
||
* 获取配置项:是否允许匿名 client 接入
|
||
*/
|
||
@Override
|
||
public boolean getConfigOfAllowAnonClient() {
|
||
return true;
|
||
}
|
||
|
||
/**
|
||
* 获取匿名 client 配置信息
|
||
*/
|
||
@Override
|
||
public SaSsoClientModel getAnonClient() {
|
||
SaSsoClientModel scm = new SaSsoClientModel();
|
||
scm.setAllowUrl("*"); // 允许的授权地址
|
||
scm.setIsSlo(true); // 是否允许单点注销
|
||
scm.setSecretKey("kQwIOrYvnXmSDkwEiFngrKidMcdrgKor"); // 客户端密钥
|
||
return scm;
|
||
}
|
||
}
|
||
```
|
||
|
||
|
||
### 2、在 sso-client 端不要配置 client 字段
|
||
|
||
然后在对应的应用端不要配置 client 字段,例如:
|
||
|
||
``` yml
|
||
# sa-token配置
|
||
sa-token:
|
||
# 配置一个不同的 token-name,以避免在和模式三 demo 一起测试时发生数据覆盖
|
||
token-name: satoken-client-anon
|
||
# sso-client 相关配置
|
||
sso-client:
|
||
# client 标识 匿名应用就是指不配置 client 标识的应用
|
||
# client: sso-client3
|
||
# sso-server 端主机地址
|
||
server-url: http://sa-sso-server.com:9000
|
||
# 使用 Http 请求校验ticket (模式三)
|
||
is-http: true
|
||
# 是否在登录时注册单点登录回调接口 (匿名应用想要参与单点注销必须打开这个)
|
||
reg-logout-call: true
|
||
# API 接口调用秘钥
|
||
secret-key: kQwIOrYvnXmSDkwEiFngrKidMcdrgKor
|
||
```
|
||
|
||
|
||
> [!TIP| label:demo]
|
||
> 匿名 Client 接入的 Demo 示例地址:[sa-token-demo-sso3-client-anon](https://gitee.com/dromara/sa-token/tree/master/sa-token-demo/sa-token-demo-sso/sa-token-demo-sso3-client-anon)
|
||
|
||
这里有个值得注意的配置项:`reg-logout-call: true`,是干嘛的?
|
||
|
||
简单来讲,就是匿名应用不包含 client 字段信息,因此 sso-server 端也无法配置此 client 的消息推送地址,所以此 client 无法接受到消息推送,也就无法参与到单点注销的环路中来。
|
||
|
||
因此,新增一个配置项 `reg-logout-call: true`,代表在登录的同时把当前项目的单点注销回调地址 `/sso/logoutCall` 发送到 sso-server 端,
|
||
这样 sso-server 端有了备案,也就可以成功通知此应用发起单点注销掉了。
|
||
|
||
如果当前应用不需要单点注销可以不配置此字段。
|
||
|