Files
sa-token/sa-token-doc/sso/anon-client.md
2025-05-09 03:53:03 +08:00

109 lines
4.0 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.
# 匿名 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 端有了备案,也就可以成功通知此应用发起单点注销掉了。
如果当前应用不需要单点注销可以不配置此字段。