メインコンテンツにスキップ

DolphinScheduler、IoTDB およびその他の Apache データプラットフォーム:Casdoor を使った SSO

· 1分読む
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 には「Log in with Casdoor」ボタン(0.3.0 以降)、Apache APISIX には authz-casdoor プラグイン(2.14.0 以降)があります。Apache IoTDB は例外です:データベース自体は独自ユーザーとパスワードで認証を行い、現在アーカイブされた IoTDB Web Workbench のみが Casdoor と通信します。下表はすべてのプロジェクト、バージョン、および設定場所を一覧にしたものであり、記事の後半では IoTDB でのユーザー認証設定をステップバイステップで解説します。

Casdoor をサポートする Apache プロジェクト​

この表のすべての事実は、各プロジェクトのソースツリーとリリースタグに基づいており、2026年11月2日に確認されました。

プロジェクトCasdoor との接続方法初回リリース設定
Apache DolphinScheduler組み込みの CASDOOR_SSO 認証タイプ(Casdoor Java SDK、OAuth 2.0 コードフロー)3.2.0dolphinscheduler-api/src/main/resources/application.yaml 内の security.authentication.type、casdoor.*
Apache DolphinScheduler汎用 OIDC ログイン(Spring Security)3.4.0同じファイル内の security.authentication.oidc.*
Apache IoTDB Web WorkbenchWeb コンソールでの Casdoor ログインタグ付きリリースなし、リポジトリはアーカイブ済みbackend/src/main/resources/application.properties 内の casdoor.*、frontend/.env 内の VUE_APP_CASDOOR
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パスワードフォームの横にある「Log in with Casdoor」ボタン0.3.0src/main/resources/application.properties 内の casdoor.*;0.4.0 以降のフロントエンド設定は front-end/src/main.js にあります
Apache ShardingSphere ElasticJob UI「Login with Casdoor」ボタンmaster ブランチのみ、3.0.2 以降バックエンドの application.properties 内の casdoor.*
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 にあるものを使用します。certificates と application settings reference の Token cert フィールドを参照してください。

Apache DolphinScheduler​

DolphinScheduler には 2 つの方法があります。

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 guide にスクリーンショットがあります。

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 に存在するユーザーのみがサインインできます。standard OIDC client guide には、発行ドキュメントと UserInfo が返す内容が記載されています。

Apache ShenYu​

Casdoor プラグインは 2.5.1 以来、ShenYu ゲートウェイに含まれています。ShenYu 管理コンソールで有効にし、プラグインデータを入力します。ドキュメントではなくソースから得られる詳細が 2 つあります。第一に、シークレットキーは client_secrect と綴られています。第二に、証明書フィールドは単一行であるため、改行ごとに \n を記述します。プラグインは Authorization ヘッダーからの JWT、またはクエリ文字列上の code と state を受け入れます。その後、ヘッダー name、id、および organization でユーザーを下流に渡します。いずれも含まないリクエストはリダイレクトされず、トークンエラーで拒否されます。ShenYu の master ブランチ(2026 年 10 月)では、プラグインはメインリポジトリから ShenYu プラグインストアに移されました。プラグイン名、フィールド、およびヘッダーは同じままで、スターター shenyu-spring-boot-starter-plugin-casdoor を自分で追加します。Using Casdoor in ShenYu を参照してください。

Apache Pulsar Manager and 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 のテーブルモデルには、table model guide に独自の構文があります。

ステップ 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の認可コードフローに置き換えます。bcryptを使用して既存のRuoYiユーザーをSyncerでCasdoorに同期するため、それらのパスワードは引き続き機能します。通常のSpring Bootアプリの場合は、Spring Boot SSO with OIDCから始めてください。

参考資料​