シングルサインオン
ユーザーやサービスが、IDプロバイダーのトークンを使ってセルフホスト型Claude Managed Agentsサーバーを呼び出せるようにします。
デフォルトでは、サーバーは1つの共有キーであるサーバーAPIキーを受け付けます。「single sign-on」(シングルサインオン)では、各ユーザーやサービスは「OpenID Connect」、すなわちOIDCのIDプロバイダーから取得したトークンでもサーバーを呼び出せます。サーバーは、トークン内のグループに基づいて呼び出し元にロールを付与します。サーバーAPIキーは管理者の認証情報として引き続き機能します。
このページでは、IDプロバイダーを追加する方法、各ロールでできること、および開発者がターミナルからログインできるようにする方法を示します。
IDプロバイダーを追加する
IDプロバイダーにサーバーを登録する
api://cma-serverなどの識別子を持つAPIとしてサーバーを登録し、クライアントにそのトークンを要求させます。設定ファイルにIDプロバイダーを列挙する
設定ファイルの
auth.issuersの下にエントリを追加します。auth: issuers: - name: okta issuer_url: https://login.example.com/oauth2/default audiences: [api://cma-server] roles: - group: cma-admins role: admin - group: "eng-*" role: developernameはログ行で発行者を識別するラベルであり、サーバーはこれを各リソースの作成者の一部として記録します。ユーザーがリソースを作成した後は変更しないでください。issuer_urlはトークンのissクレームと一致する必要があります。audiencesは、最初のステップで設定した識別子など、トークンのaudクレームが持つことのできる値を列挙します。rolesは、グループをadmin、developer、またはuserにマッピングします。一致したロールのうち最も高いものが適用されます。
その他のフィールドについては、発行者エントリを参照してください。プロバイダーがMicrosoft Entra IDの場合は、Microsoft Entra IDも参照してください。
サーバーを再起動してサインインを確認する
サーバーを再起動します。呼び出し元は、サーバーAPIキーを受け付ける任意のルートで、トークンを
Authorization: Bearer <token>として送信します。トークンで認証されたすべてのリクエストについて、サーバーは
auth=oidc、発行者のname、および呼び出し元のサブジェクト(sub=)をログに記録します。
サインインが失敗した場合
| レスポンス | 原因 | サーバーのログ行に含まれる内容 |
|---|---|---|
401(誤ったAPIキーの場合と同じ) | トークンがチェックに失敗しました。理由はログ行に記録されます。 | oidc token |
403 | トークンのグループがどのrolesエントリにも一致しません | token holds no role |
Microsoft Entra ID
Entra IDは、次の2点で他のプロバイダーと異なります。どちらの設定も発行者エントリに記述します。
- ユーザー: Entra IDはクライアントアプリケーションごとに異なる
subをユーザーに付与するため、デフォルトでは1人のユーザーが複数の作成者として記録されてしまいます。subject_claim: oidを設定してください。 - グループ: ユーザーが多数のグループに所属している場合、Entra IDはトークンから
groupsクレームを省略します。その場合、そのユーザーはどのrolesエントリにも一致しなくなります。これを防ぐには、アプリケーションに割り当てられたグループのみをEntra IDに出力させてください。または、Entra IDでユーザーにアプリロールを割り当て、groups_claim: rolesを設定して、サーバーがグループの代わりにアプリロールを読み取るようにしてください。
各ロールでできること
| ロール | エージェント、スキル、セッション、ボールト、メモリストア | 環境 |
|---|---|---|
admin、およびサーバーAPIキー | すべてを参照・変更できる | 作成、変更、削除、およびキーの作成ができる |
developerまたはuser | その呼び出し元が作成したもののみ参照・変更できる | 一覧表示、読み取り、およびセッションの実行ができる |
developerとuserのアクセス権は同じです。いずれかのロールを持つ呼び出し元は、次のようになります。
- 他の誰かが作成したリソースを参照できません。 そのリソースはリストに表示されず、そのIDに対するリクエストは不明なIDに対するリクエストと同じ応答を受け取ります。これには、シングルサインオンを有効にする前にサーバーAPIキーで作成されたすべてのものが含まれます。
- リソースを共有できません(他の呼び出し元やグループとの共有)。
adminは正確なグループ名にマッピングしてください。管理者は任意のユーザーのボールトを使用するセッションを開始することもできます。そのため、このロールは全ユーザーのMCPトークンを任せられるグループにのみ付与してください。
開発者がターミナルからログインできるようにする
開発者は、IDプロバイダー経由でログインし、サーバーAPIキーを使わずに自身のIDでant CLIを使用できます。最初の2つのステップは管理者が行い、3つ目のステップは各開発者が行います。
IDプロバイダーにアプリケーションを登録する
次の条件を持つネイティブ(「パブリック」)アプリケーションを登録します。
- クライアントシークレットなし
- PKCE付きの認可コードグラント
- リダイレクトURI
http://127.0.0.1/callback
一部のプロバイダーでは、その他のリダイレクトURIのいずれかが必要です。
発行者エントリにアプリケーションを追加する
発行者エントリに
login_client_idとlogin_scopesを追加して、サーバーを再起動します。login_client_id: 0oa1b2c3d4e5f6g7h8i9 login_scopes: [openid, cma-server.access]login_scopesには、audクレームが発行者エントリのaudiencesリストに含まれるトークンを発行するためにプロバイダーが必要とするスコープを列挙します。ログインする
各開発者は、展開したアーカイブの最上位からログインを実行します。
./cma-server-admin login https://cma.example.comサーバーのURLは
https://であるか、localhost、127.0.0.1、または::1へのhttp://である必要があります。その他のリダイレクトURIのいずれかを使用する場合は、そのフラグをコマンドに追加します。このコマンドはブラウザでプロバイダーのサインインページを開き、その後
cma-serverという名前のantCLIプロファイルを書き込みます。任意のantコマンドに--profile cma-serverを渡すか、ant profile activate cma-serverを実行してそのプロファイルをデフォルトにします。
トークンの有効期限が切れたら、開発者は再度loginを実行します。代わりにant CLIにトークンを更新させるには、login_scopesにoffline_accessを追加します。
その他のリダイレクトURI
| プロバイダー | 登録するリダイレクトURI | 開発者がloginコマンドに追加するフラグ |
|---|---|---|
| Microsoft Entra ID | http://localhost/callback | -listen localhost:0 |
| リダイレクトURIにポートを必要とするもの | http://127.0.0.1:8123/callbackのような固定ポートを持つURI | -listen 127.0.0.1:8123 |
その他のフラグを一覧表示するには、loginコマンドに-hを追加します。
サーバー上のコンソールにユーザーがサインインできるようにする
サーバー上のコンソールは、ターミナルログイン用に登録したアプリケーションを通じてユーザーをサインインさせます。セットアップを完了するには、サインインを設定するを参照してください。
このページは役に立ちましたか?