コンテンツにスキップ

SAML 2.0 で SSO を設定する

組織のオーナーと管理者が、SAML 2.0 の IdP のアカウントで、メンバーを Actagate にログインさせるための手順です。 IdP のメタデータ XML を Actagate に取り込み、表示された SP の情報を IdP に登録して、テストしてから有効にします。

始める前に、運用担当者に WEB_BASE_URL を設定してもらいます。SP メタデータ URL と ACS URL は、この値から作られます。

  1. IdP の管理画面で SAML 2.0 のアプリを作ります。SP の情報は未定です。入力を求められたら仮の値を入れておきます
  2. NameID の形式を persistent にし、利用者ごとに変わらない値を設定します。transient は不可です
  3. 属性 email (または mail) で、利用者のメールアドレスを送るようにします
  4. アサーションへの署名を有効にし、署名とダイジェストのアルゴリズムを SHA-256 にします
  5. テストする管理者と、ログインさせるメンバーにアプリを割り当てます
  6. IdP のメタデータ XML をダウンロードします

メール属性は、次の名前でも受け付けます。

  • http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress
  • urn:oid:0.9.2342.19200300.100.1.3

Actagate は署名済みアサーションのメール属性を、初回の紐づけに使える検証済みのメールアドレスとして扱います。IdP では、利用者が他人のメールアドレスを名乗れないように設定してください。

次のメタデータは取り込めず、saml_invalid_xml か saml_invalid_metadata になります。

  • DOCTYPE や ENTITY の宣言を含む XML
  • 256 KiB を超える XML
  • ルート要素が EntityDescriptor でないもの (複数の IdP を EntitiesDescriptor でまとめた XML など)
  • SSO URL に HTTPS の HTTP-Redirect binding がないもの (HTTP-POST の binding だけの IdP)
  • 署名証明書が含まれていないもの、または 3 本以上含むもの

SHA-1 は使えません。署名とダイジェストのどちらかが SHA-1 なら、ログインのときに拒否します。

  1. 「設定」の「セキュリティ」(/ws/settings/security) を開き、「シングルサインオン」の「プロバイダを選んで接続を追加」で「SAML 2.0」を開きます。接続のフォームが開きます
  2. 「表示名」を入れ、「IdP メタデータ XML」に XML を貼り付けるか、「メタデータファイル」でファイルを選びます
  3. 「接続を追加」を押します。「接続を保存しました。」と表示され、「接続」の一覧に「下書き · 未テスト」の接続が増えます
SAML の接続フォーム
SAML の接続フォーム。「表示名」「IdP メタデータ XML」「メタデータファイル」、既定でオフの「IdP 起点のログインを許可する(既定では無効)」と「接続を追加」が並ぶ

保存した接続に、IdP に登録する値が表示されます。<ホスト> は公開 URL、<接続 ID> は保存した接続の ID です。

項目 値
SP メタデータ URL https://<ホスト>/api/auth/sso/saml/<接続 ID>/metadata
SP エンティティ ID SP メタデータ URL と同じ
ACS URL https://<ホスト>/api/auth/sso/saml/<接続 ID>/acs
ACS の binding HTTP-POST
NameID persistent

表示された値をそのまま使います。

  1. IdP のアプリに、SP エンティティ ID を Audience として、ACS URL を Destination と Recipient として登録します。SP メタデータ URL を読み込める IdP なら、URL を渡すだけです
  2. アサーションの有効期限を 10 分以内にして保存します。これで IdP 側の準備は終わりです

時計のずれは 2 分まで許容します。ログインの要求の期限は 10 分です。

  1. 接続の「テスト」を押します。IdP のサインイン画面に移ります
  2. 管理者自身の IdP のアカウントでサインインし、同じブラウザーで Actagate に戻ります。「テストに成功しました。接続を有効化できます。」と表示され、接続は「テスト済み」になります

テストは認証の確認だけです。利用者は作りません。

  1. 接続の「有効化」を押します。「接続を有効にしました。ログイン画面から利用できます。」と表示され、状態が「有効」になります

IdP の entity ID、SSO URL、証明書、IdP 起点のログインの許可を変えると、テストの結果が消えて下書きに戻ります。利用者がこの接続でログインした後は、IdP の entity ID を変更できません。別の IdP に移るときは新しい接続を追加します。

IdP のポータルから始めるログイン (IdP 起点) は、既定で無効です。理由は安全性です。IdP 起点ではログインを始めたブラウザーを確かめられないため、第三者のアカウントでログインさせられるリスクが残ります。必要なときだけ、接続の「設定を編集」で「IdP 起点のログインを許可する(既定では無効)」を選んで保存し、テストし直します。IdP 起点の応答では管理者のテストを完了できません。ログイン後の移動先は / です。

署名証明書は 2 本まで含められるので、切り替えの間は両方を並べておきます。

  1. IdP で新しい証明書を作り、旧証明書と新証明書の両方を含むメタデータを書き出します
  2. 「設定を編集」でそのメタデータを保存し、テストして有効化します
  3. IdP の署名鍵を新しい証明書に切り替えます
  4. 旧証明書を外したメタデータを保存し、もう一度テストして有効化します
  1. 招待済みの一般メンバーがログイン画面を開きます。「<表示名> で続ける」のボタンが出ています
  2. ボタンを押して IdP でサインインします。Actagate の画面が開きます

初回のログインでだけ、メール属性を招待済みメンバーのメールアドレスと照合し、そのメンバーに NameID を紐づけます。2 回目からは NameID で同じ人を特定するため、メールアドレスが変わっても同じアカウントのままです。初回の紐づけで管理者の権限は与えません。オーナーと管理者は、既存の方法でログインしてから「設定」の「ログイン方法」で「<表示名> を追加」を押して紐づけます。

  • saml_transient_nameid: NameID の形式を persistent にします
  • saml_invalid_response: アサーションの署名と、SHA-1 を使っていないことを確かめます
  • saml_destination_mismatch / saml_recipient_mismatch: IdP に登録した ACS URL が、表示と一致しているか確かめます
  • saml_idp_initiated: IdP 起点のログインは許可されていません。ログイン画面から始めるか、IdP 起点を許可します
  • saml_browser_mismatch: ログインを始めたブラウザーでやり直します

ほかの理由コードは SSO で困ったとき にまとめています。