跳到主内容

DolphinScheduler、IoTDB 及其他 Apache 数据平台:使用 Casdoor 实现单点登录

· 阅读时间:一分钟
Yang Luo
Casdoor Maintainer

几个 Apache 数据和中间件项目自带了 Casdoor 登录功能:Apache DolphinScheduler 具有一种名为 CASDOOR_SSO 的身份验证类型(自 3.2.0 起)和一种通用的 OIDC 模式(自 3.4.0 起),Apache ShenYu 具有 Casdoor 插件(自 2.5.1 起),Apache Pulsar Manager 具有“使用 Casdoor 登录”按钮(自 0.3.0 起),而 Apache APISIX 具有 authz-casdoor 插件(自 2.14.0 起)。Apache IoTDB 是个例外:数据库本身使用自己的用户名和密码进行身份验证,只有现已归档的 IoTDB Web Workbench 与 Casdoor 通信。下表列出了每个项目、版本以及设置所在的位置;文章后半部分逐步介绍了如何在 IoTDB 中设置用户身份验证。

哪些 Apache 项目支持 Casdoor​

此表中的所有事实均来自各项目的源代码树和发布标签,检查日期为 2026-11-02。

项目如何连接到 Casdoor首个发布版本设置
Apache DolphinScheduler内置 CASDOOR_SSO 身份验证类型(Casdoor Java SDK,OAuth 2.0 代码流)3.2.0security.authentication.type, casdoor.* 位于 dolphinscheduler-api/src/main/resources/application.yaml
Apache DolphinScheduler通用 OIDC 登录(Spring Security)3.4.0security.authentication.oidc.* 位于同一文件
Apache IoTDB Web WorkbenchWeb 控制台中的 Casdoor 登录无标记发布版本,仓库已归档casdoor.* 位于 backend/src/main/resources/application.properties,VUE_APP_CASDOOR 位于 frontend/.env
Apache IoTDB(服务器)原生用户和角色;OpenIdAuthorizer 存在于直到 2.0.8 的版本并被移除n/a参见下方的 IoTDB 部分
Apache ShenYu网关上的 Casdoor 插件2.5.1插件配置 endpoint, client_id, client_secrect, certificate, organization-name, application-name
Apache Pulsar Manager密码表单旁边的“使用 Casdoor 登录”按钮0.3.0casdoor.* 位于 src/main/resources/application.properties;前端配置自 0.4.0 起位于 front-end/src/main.js
Apache ShardingSphere ElasticJob UI“使用 Casdoor 登录”按钮仅 master 分支,3.0.2 之后casdoor.* 位于后端 application.properties
Apache APISIXauthz-casdoor 插件,或 openid-connect2.14.0endpoint_addr, client_id, client_secret, callback_url
RuoYi-Cloud(非 Apache 项目)使用 Casdoor Spring Boot SDK 进行代码更改n/a您自己的登录控制器

表中的每个基于 SDK 的集成都遵循相同的模式。你在 Casdoor 中创建一个应用,复制其客户端 ID、客户端密钥以及其令牌证书的公钥证书,并将它们与组织名称和应用名称一起粘贴到项目的配置中。项目会将浏览器重定向到 Casdoor,接收授权码,将其交换为 JWT,并使用证书验证 JWT。该证书位于 Casdoor 管理控制台的 Certs 下;请参阅 证书 和 应用设置参考 中的 Token cert 字段。

Apache DolphinScheduler​

DolphinScheduler 提供了两种接入方式。

CASDOOR_SSO 自 3.2.0 版本起就已存在。设置类型并填写 dolphinscheduler-api/src/main/resources/application.yaml 中的顶层 casdoor 块:

security:
authentication:
type: CASDOOR_SSO
casdoor:
user:
admin: "alice" # this Casdoor user becomes a DolphinScheduler admin
casdoor:
endpoint: https://door.example.com
client-id: <client id>
client-secret: <client secret>
certificate: |-
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
organization-name: my-org
application-name: app-dolphinscheduler
redirect-url: http://localhost:5173/login

redirect-url 是 DolphinScheduler UI 登录页面,它也必须包含在 Casdoor 应用的 Redirect URLs 中。首次登录时,DolphinScheduler 会使用 Casdoor 的用户名和电子邮件创建一个本地用户。在 security.authentication.casdoor.user.admin 中指定的用户将获得管理员类型;其他所有人都会成为普通用户。我们的 DolphinScheduler 指南 中有截图说明。

OIDC 于 3.4.0 版本推出。它是通用的,因此 Casdoor 可以作为一个普通的颁发者工作。Spring Security 的发现机制要求配置的颁发者与发现文档中的 issuer 匹配,而 Casdoor 的颁发者是其后端的源地址,因此 issuer-uri 只是 Casdoor URL:

api:
base-url: https://ds.example.com/dolphinscheduler
ui-url: https://ds.example.com
security:
authentication:
type: OIDC
oidc:
enable: true
providers:
casdoor:
display-name: "Login with Casdoor"
issuer-uri: https://door.example.com
client-id: <client id>
client-secret: <client secret>
scope: openid, profile, email
user-name-attribute: preferred_username
groups-claim: groups
user:
auto-create: true
default-tenant-code: "default"
default-queue: "default"
admin-group-mapping:
- my-org/ds-admins

需要在 Casdoor 中注册的重定向 URL 是 https://ds.example.com/dolphinscheduler/login/oauth2/code/casdoor,即 api.base-url 加上 /login/oauth2/code/ 再加上提供商键。使用 profile 范围时,Casdoor 的 UserInfo 端点会返回 preferred_username 和 groups。默认情况下,群组以 my-org/ds-admins 的形式到达。如果你更希望在 admin-group-mapping 中写入 ds-admins,请在应用中设置 Token group format 为 Name (group)。如果 auto-create 为 false(上游默认值),则只有已存在于 DolphinScheduler 中的用户才能登录。标准 OIDC 客户端指南 列出了发现文档和 UserInfo 返回的内容。

Apache ShenYu​

Casdoor 插件自 2.5.1 版本起随 ShenYu 网关一同发布。你可以在 ShenYu 管理控制台中启用它并填写插件数据。有两个细节来自源代码而非文档。首先,密钥拼写为 client_secrect。其次,证书字段是单行的,因此你需要在每个换行符处写入 \n。该插件接受来自 Authorization 标头的 JWT,或查询字符串中的 code 和 state。然后,它通过标头 name、id 和 organization 将用户传递给下游。既没有这些信息的请求会被拒绝并返回令牌错误,而不是重定向。在 ShenYu 的主分支(2026 年 10 月)上,该插件已从主仓库移至 ShenYu 插件商店。插件名称、字段和标头保持不变,你需要自行添加启动器 shenyu-spring-boot-starter-plugin-casdoor。请参阅 在 ShenYu 中使用 Casdoor。

Apache Pulsar Manager 和 ShardingSphere ElasticJob UI​

Pulsar Manager 在 0.3.0 版本中添加了 Casdoor。后端从 src/main/resources/application.properties 读取 casdoor.endpoint、casdoor.clientId、casdoor.clientSecret、casdoor.certificate、casdoor.organizationName 和 casdoor.applicationName。自 0.4.0 版本起,前端使用 casdoor-vue-sdk,并在 front-end/src/main.js 中配置 serverUrl、clientId、organizationName、appName 和 redirectPath。首次使用的 Casdoor 用户会获得一个本地的 Pulsar Manager 账户。请参阅 Pulsar Manager。

ElasticJob UI 是 Apache ShardingSphere ElasticJob 的控制台,于 2022 年 11 月合并了 Casdoor 登录功能。那是在其最后一次发布版本 3.0.2 之后,因此你需要构建 master 分支。键使用连字符:casdoor.endpoint、casdoor.client-id、casdoor.client-secret、casdoor.certificate、casdoor.organization-name、casdoor.application-name。请参阅 ShardingSphere。

对于 Apache APISIX,两个插件均在 APISIX 中涵盖。

Apache IoTDB 分步用户身份验证设置​

IoTDB 使用由数据库存储的用户名和密码对每个会话(CLI、JDBC、Session API)进行身份验证。由于服务器端没有 Casdoor 登录,因此设置采用 IoTDB 的原生用户模型。以下语句适用于树模型。IoTDB 2.x 的表格模型在其 表格模型指南 中有自己的语法。

步骤 1. 更改 root 密码。 root 是唯一的管理员且无法删除。使用 CLI 登录并设置强密码:

ALTER USER root SET PASSWORD 'Str0ng_Passw0rd!';

步骤 2. 创建用户。 用户名和密码长度为 4 到 32 个字符。它们可以包含字母、数字和 !@#$%^&*()_+-=,并且从 V2.0.7 版本开始,密码不能等于用户名。TimechoDB(Timecho 的商业版 IoTDB 发行版)要求 12 到 32 个字符,包含大小写字母、数字和符号,并且具有不同的默认 root 密码。请以相同方式更改它。

CREATE USER ln_reader 'Read_Passw0rd!';
CREATE USER ops_admin 'Ops_Passw0rd!';

步骤 3. 角色中的权限组。 新用户没有任何权限。序列权限(READ_DATA、WRITE_DATA、READ_SCHEMA、WRITE_SCHEMA,或别名 READ、WRITE、ALL)是在路径模式上授予的:

CREATE ROLE ln_readers;
GRANT READ ON root.ln.** TO ROLE ln_readers;
GRANT ROLE ln_readers TO ln_reader;

步骤 4. 委托用户管理。 这里各版本有所不同。从 V2.0.7 版本开始,全局权限为 SYSTEM 和 SECURITY。在此之前,它们被拆分为 MANAGE_USER、MANAGE_ROLE、MANAGE_DATABASE 等。全局权限始终在 root.** 上授予:

-- IoTDB V2.0.7 and later, TimechoDB
GRANT SECURITY ON root.** TO USER ops_admin;
-- before V2.0.7
GRANT MANAGE_USER, MANAGE_ROLE ON root.** TO USER ops_admin;

步骤 5. 连接并验证。

sbin/start-cli.sh -h 127.0.0.1 -p 6667 -u ln_reader -pw 'Read_Passw0rd!'

然后运行 LIST PRIVILEGES OF USER ln_reader;。用户的有效权限是其自身权限与其角色权限的并集。要撤销权限,请从用户以及授予该权限的每个角色中撤销。

IoTDB 中的 OIDC 怎么样?​

较旧的 IoTDB 版本使用 authorizer_provider_class=org.apache.iotdb.commons.auth.authorizer.OpenIdAuthorizer 和 openID_url。客户端将访问令牌作为用户名传递,密码为空。该授权器围绕 Keycloak 构建。它仅在令牌的 realm_access.roles 包含 iotdb_admin 时才将用户视为管理员,并且所有权限检查都归结为此测试。其令牌解析器还设置了近乎无限的时钟偏移,实际上会忽略令牌过期。Casdoor 不会发出 realm_access,因此这从来都不适用。IoTDB 在 2026 年 3 月移除了它 (apache/iotdb#17320),并且在 2.0.10 和 2.0.11 中也不存在。

如果您想在 IoTDB 前使用 Casdoor 账户,现有的选项是 IoTDB Web Workbench 集成。其仓库在 GitHub 上已归档,因此请将其视为起点而非维护的产品。数据库连接本身仍然使用上述步骤中的 IoTDB 用户。

RuoYi​

RuoYi-Cloud 没有 Casdoor 开关。我们的 RuoYi 指南 通过 Casdoor Spring Boot SDK 使用 Casdoor 授权码流程替换其密码登录。它使用同步器将现有的 RuoYi 用户同步到 Casdoor,使用 bcrypt 以便他们的密码继续有效。对于普通的 Spring Boot 应用,请从 Spring Boot SSO with OIDC 开始。

参考资料​