SSO 設定リファレンス
シングルサインオンについて設定できるものすべてを、1 か所にまとめました。値は global.db の sso_connections 行にあり(設計上サーバー全体)、設定 → サーバー → シングルサインオンか sso.* RPC 操作で編集します。保存済みの行だけが唯一の信頼できる情報源です — CC_SAML_* / CC_OIDC_* のような環境変数の経路はありません(2 か所から届きうる接続は、設定画面が食い違える接続です)。
接続のフィールド
「接続のフィールド」というセクション| フィールド | 適用対象 | デフォルト | 意味 |
|---|---|---|---|
enabled |
両方 | オフ | ログインがこの接続を利用できる |
idpMetadataXml |
SAML | — | IdP の EntityDescriptor XML(有効化に必須) |
spEntityId |
SAML | <origin>/saml |
自社のエンティティ ID。オリジンが変わる場合に固定します |
emailAttribute |
SAML | email |
メールアドレスを運ぶ属性。メール形式の NameID がフォールバックです |
displayNameAttribute |
SAML | displayName |
表示名の属性 |
groupsAttribute |
SAML | groups |
グループ名の属性 |
clockSkewSeconds |
SAML | 90 | 有効期間検証で許容する時計ずれ |
allowIdpInitiated |
SAML | オフ | 未要求のレスポンス(InResponseTo なし)を受け付ける |
wantResponseSigned |
SAML | オフ | レスポンスルートの署名を必須にする(アサーション署名は常に必須) |
issuer |
OIDC | — | 発行元のベース URL(有効化に必須) |
clientId |
OIDC | — | パブリッククライアント ID(有効化に必須) |
clientSecret |
OIDC | — | コンフィデンシャルクライアント専用。0600 のシークレットファイルに保存され、データベースには保存されません — RPC 経由では書き込み専用です(sso.getConfig は clientSecretPresent を報告します) |
groupsClaim |
OIDC | groups |
グループ名を運ぶクレーム |
defaultRole |
両方 | member |
どのグループもマッピングされないときのロール — owner になることはありません |
groupRoleMap |
両方 | {} |
グループ → ロール。オーナーのマッピングは保存時に拒否されます |
autoMember |
両方 | オン | 初回ログイン時にユーザーをすべてのワークスペースへ自動追加 |
allowJit |
両方 | オン | ログイン時に未知のユーザーをプロビジョニング |
プロセスの設定
「プロセスの設定」というセクションSSO 接続は環境からシードされません。残るプロセスフラグの 1 つは、接続の行ではなくブラウザーハンドオフに関するものです:
| 変数 / フラグ | 意味 |
|---|---|
--web-client-url / CC_SERVER_WEB_CLIENT_URL |
SSO コールバックがブラウザーを戻す先のオリジン(資格情報は URL フラグメントに乗ります)。未設定ならハンドオフは同一オリジンのままです。 |
発行元の URL 自体は https でなければなりません(http が許可されるのは、ループバックの発行元 localhost、127.0.0.1、::1 だけです)。
HTTP エンドポイント
「HTTP エンドポイント」というセクション| エンドポイント | 認証 | 目的 |
|---|---|---|
GET /saml/login?relay=… |
なし(リダイレクト) | SP 起点のログインを開始します。relay=desktop はアプリへハンドオフし、relay=web-popup は待機中の接続タブへ postMessage します(そのタブは自身の client_origin を宣言し、これはオリジンの許可リストが信頼する場合にのみ尊重されます) |
POST /saml/acs |
なし(IdP が POST) | アサーションコンシューマー — 検証し、プロビジョニングし、発行します |
GET /saml/metadata |
なし | 自社の SP EntityDescriptor |
GET /oidc/login?relay=… / GET /oidc/callback |
なし | OIDC の往復です。relay=desktop はアプリへ、relay=web-popup は待機中の接続タブへハンドオフします(client_origin の取り決めは同じです) |
GET /auth/providers |
なし、CORS * |
接続画面のプローブです。提供される SSO 接続(id/kind/label)と pairingEnabled |
/scim/v2/Users… |
ベアラー(SCIM トークン) | Users の作成・取得・一覧+フィルター・PUT・PATCH・DELETE |
/scim/v2/Groups |
ベアラー | 読み取り専用。グループプッシュは設計上 501 を返します |
/scim/v2/ServiceProviderConfig |
ベアラー | ケイパビリティドキュメント |
RPC 操作
「RPC 操作」というセクションsso.* の操作はすべてサーバースコープで、サーバーのオーナー(インストールのオペレーター、ServerAuthority.serverOwner)に限定されます。ワークスペースを所有しているだけでは不十分で、ペアリングだけでは決して付与されません。
| 操作 | 目的 |
|---|---|
sso.getConfig |
ある種別の保存済み接続 |
sso.saveConfig |
検証し、永続化し、ライブで適用します |
sso.status |
有効/設定済みのフラグ、SCIM トークンの有無、正規のオリジン |
sso.testConnection |
ブラウザーの往復を除いて接続をテストします(SAML: メタデータのパース + AuthnRequest の構築、OIDC: 発行元のディスカバリ)。画面の未保存の値も任意で使えます |
sso.spMetadata |
あるオリジンの SP EntityDescriptor を出力します |
sso.setPairingEnabled |
手動ペアリング(招待コード、ペアリングキー)を許可/禁止します。機能する SSO 接続が存在しないうちは無効化を拒否することで、ロックアウトを防ぎます |
sso.sessionPolicy |
インストールのデバイス認証情報の最大有効期間とアイドルタイムアウトを読み取ります(分単位。0 = 未設定) |
sso.setSessionPolicy |
それらの上限を設定します。デバイスチェック時に適用され、クライアントには通知されません |
sso.scimRegenerateToken |
SCIM ベアラートークンを生成して返します(一度だけ) |
検証エラーコード
「検証エラーコード」というセクションcc_saml_verify_response の失敗は、安定したコードを伴います:
| コード | 意味 |
|---|---|
signature |
署名の欠落、信頼できない、改ざん、または許可されないアルゴリズム/変換 |
expired |
NotBefore/NotOnOrAfter の範囲外(ずれの許容を超える) |
audience |
オーディエンス制限が自社を名指ししていない |
destination |
レスポンスの送信先が自社の ACS でない |
request_match |
InResponseTo が保留中のリクエストと一致しない、または不許可なのに未要求である |
issuer |
発行元が設定済みの IdP でない |
recipient |
サブジェクト確認の受信者が自社の ACS でない |
malformed |
XML/スキーマレベルの失敗 |
status |
IdP が報告したステータスが Success でない |
invalid / internal |
その他すべて / シームの失敗 |
データベースのサーフェス
「データベースのサーフェス」というセクションsso_connections(global.db) — 種別ごとに 1 行。設計上、ワークスペース横断です。users.sso_subject+users.sso_issuer— プロバイダーのサブジェクトの固定。部分インデックスにより(issuer, subject)ごとに一意です。users.deactivated_at— SCIM のプロビジョニング解除のスタンプ。- SCIM ベアラートークンと OIDC クライアントシークレットは 0600 のシークレットファイルにあり、データベースには保存されません。