CtoS
契約・組織

自分たちのIdPでログインさせる(SSO・OpenID Connect)

前提

管理画面の「アカウント・サポート」→「SSO(組織のIdP)」です。プロジェクトの全権の管理員だけが使えます(管理範囲を限った管理員は、使えません)。

会社などで使っているIdP(Okta・Microsoft Entra ID・Keycloak など、OpenID Connectに対応したもの)を、このプロジェクトのログインに使えます。メンバーは、会社のアカウントで、このプロジェクトにログインできます。

Google・Microsoftでのログインとは、別の機能です 「SSO設定(Google・Microsoftでのログイン)」は、サービス全体に共通の設定で、運営者だけが変えられます。この記事の機能は、プロジェクトごとに、管理員が、自分たちのIdPを設定します。

設定の流れ

  1. 画面の「1. IdPに登録する値」の、リダイレクトURIを、IdP側で、アプリ(クライアント)の設定に登録します。認可の種類は、Authorization Code(クライアントシークレットを使う、Webアプリケーション)、スコープは openid email profile です。このURLは、すべてのプロジェクトで共通の、1つです。独自ドメインを使っていても、IdPに登録するのは、このURLだけです。
  2. 「2. IdPの情報」に、Issuer(発行元)のURL・クライアントID・クライアントシークレットを入れて、「保存」します。保存すると、接続先(認可・トークンのURLなど)を、IdPから自動で取得します。うまくいかないときは、「IdPへの接続を確認」で、理由を確かめます。
  3. 「3. ログインを許すドメイン」で、メンバーのメールアドレスのドメイン(例: example.co.jp)を追加し、DNSの設定で、ドメインの所有を確認します(下の説明を参照)。
  4. 「このSSOを使う」をオンにして、「保存」します。画面の上の「状態」が、「ログイン画面に表示中」に変わります。

メンバーには、「状態」に表示されるログイン用のURLを配ると、そこから直接、SSOでログインできます。独自ドメインのログイン画面や、プロジェクトのログイン画面にも、「〇〇でログイン」のボタンが出ます。ボタンの名前は、「ボタンに表示する名前」で決められます。

ドメインの所有を確認する

IdPは、お客様が管理するものなので、どんなメールアドレスでも、名乗れてしまいます。そこで、DNSで、そのドメインをお客様が持っていると確認できたドメインのメールアドレスだけを、ログインさせます。他の人のメールアドレスで、その人の会員になりすませないようにするためです。サブドメイン(dept.example.co.jp など)も、含まれます。

  1. ドメインを追加すると、画面に、TXTレコードの「名前」と「値」が出ます。
  2. そのドメインのDNSに、表示どおりのTXTレコードを追加します(例: 名前 _ctos-challenge.example.co.jp、値 ctos-verify=…)。
  3. 「確認する」を押します。「確認済み」になれば、完了です。DNSの設定が反映されるまで、数分〜数時間かかることがあります。

確認済みのドメインが1つも無いと、「このSSOを使う」はオンにできません。確認済みのドメインを削除して、1つも無くなったときは、ログインは止まります。

だれが、どうログインできるか

場面動き
確認済みのドメイン以外のメールアドレスログインできません。会員も作られません
初めてログインする人(同じメールアドレスの会員が、まだいない)「初めてログインした人を、自動で会員にする」がオンなら、新しい会員を作り、このプロジェクトに「参加者」として加えます。オフなら、ログインできません
同じメールアドレスの会員が、すでにいるその会員が、メールアドレスを確認済みなら、結び付けて、ログインさせます。確認が済んでいない会員は、別の人が登録した可能性があるので、結び付けません
プロジェクトの、加入申請中の人自動作成がオンなら、承認され、「参加者」になります
すでに「閲覧のみ」などの権限がある人権限は、SSOでは変わりません
プロジェクトのメンバーから外した人SSOでも、ログインできません(黙って、メンバーに戻ることはありません)
二段階認証を設定している人SSOではログインできません。パスワードと認証コードで、ログインします
メンバー数が、プランの上限に達している新しい会員は、作られません。プランを上げるか、不要なメンバーを整理します

自動で作られた会員は、パスワードを持ちません(SSOでログインします)。パスワードでもログインしたいときは、ログイン画面の「パスワードをお忘れですか?」から、設定できます。

パスワードでのログインは、これまでどおり使えます 「SSOを必須にして、パスワードを止める」設定は、まだありません。

うまくいかないとき

表示原因と対処
保存したのに「まだ『使う』にできません」「足りないもの」に出た項目を、そろえます(IdPへの接続・クライアントID・シークレット・所有を確認したドメイン)
「IdPに接続できませんでした」Issuer のURLを確かめます。(Issuer)/.well-known/openid-configuration が、ブラウザで開けるかを確かめます。社内からしか届かないIdPや、https 以外のURL、ポート番号の付いたURLは、使えません
「IdPが返した issuer が、入力した Issuer と一致しません」IdPが返す issuer と、入力したものを、完全に合わせます(末尾の / の違いは、問題ありません)
ログイン時に「このメールアドレスのドメインは、許可されていません」そのメールアドレスのドメインが、確認済みのドメインに入っていません。ドメインを追加して、確認します
ログイン時に「相手のサービスとの通信に失敗しました」クライアントシークレットの誤り・期限切れや、IdP側のリダイレクトURIの登録漏れが、よくある原因です。IdP側の設定を確かめます
ボタンが出ない「状態」が「ログイン画面に表示中」になっているかを確かめます

安全のための仕組み

  • シークレットは暗号化して保存し、保存したあとは、画面に表示しません(変えるときだけ、入力します)。プロジェクトのデータの書き出しや、操作の記録にも、出ません。
  • IdPのURLへの接続は、安全なものに限ります。https のURLで、公開されたアドレスだけです。社内のアドレスなどには、接続しません。
  • ログインの手続きには、state・nonce・PKCE(S256)を使い、IdPが返すIDトークンの発行元・宛先・期限を確かめます。
  • 設定の変更とSSOでのログインは、操作の記録(監査ログ)に残ります(分類は、「外部連携・API」と「セキュリティ(認証)」)。

あわせて読みたい

  • SSO設定(Google・Microsoftでのログイン)
  • 操作の記録(監査ログ)を見る
  • メンバーの承認と権限を管理する