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

4.0 KiB
Raw Blame History

匿名 Client 接入

匿名 Client 就是指在客户端没有配置 sso-client 的应用,没有一个明确的 “Client” 标识名称。

匿名 Client 在一些关键步骤中不会构建 client 参数,如:“重定向至认证中心授权地址”、“校验 ticket”、“单点注销” 等。

要想匿名 client 接入,你需要做一些特殊配置。

1、在 sso-server 端开启匿名 client 接入

开启方式一,通过配置项方式:

# Sa-Token 配置
sa-token:
    # SSO-Server 配置
    sso-server:
        # 是否启用匿名 client (开启匿名 client 后,允许客户端接入时不提交 client 参数)
        allow-anon-client: true
        # 所有允许的授权回调地址 (匿名 client 使用)
        allow-url: "*"
        # API 接口调用秘钥 (全局默认 + 匿名 client 使用)
        secret-key: kQwIOrYvnXmSDkwEiFngrKidMcdrgKor
# 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

开启方式二,通过代码重写方式:

/**
 * 重写 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 字段,例如:

# 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

这里有个值得注意的配置项:reg-logout-call: true,是干嘛的?

简单来讲,就是匿名应用不包含 client 字段信息,因此 sso-server 端也无法配置此 client 的消息推送地址,所以此 client 无法接受到消息推送,也就无法参与到单点注销的环路中来。

因此,新增一个配置项 reg-logout-call: true,代表在登录的同时把当前项目的单点注销回调地址 /sso/logoutCall 发送到 sso-server 端, 这样 sso-server 端有了备案,也就可以成功通知此应用发起单点注销掉了。

如果当前应用不需要单点注销可以不配置此字段。