コンテンツにスキップ

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 だけです)。

エンドポイント 認証 目的
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 ベアラー ケイパビリティドキュメント

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 のシークレットファイルにあり、データベースには保存されません。