SAML 2.0 で SSO を設定する
組織のオーナーと管理者が、SAML 2.0 の IdP のアカウントで、メンバーを Actagate にログインさせるための手順です。 IdP のメタデータ XML を Actagate に取り込み、表示された SP の情報を IdP に登録して、テストしてから有効にします。
始める前に、運用担当者に WEB_BASE_URL を設定してもらいます。SP メタデータ URL と ACS URL は、この値から作られます。
1. IdP でアプリを作る
Section titled “1. IdP でアプリを作る”- IdP の管理画面で SAML 2.0 のアプリを作ります。SP の情報は未定です。入力を求められたら仮の値を入れておきます
- NameID の形式を persistent にし、利用者ごとに変わらない値を設定します。transient は不可です
- 属性
email(またはmail) で、利用者のメールアドレスを送るようにします - アサーションへの署名を有効にし、署名とダイジェストのアルゴリズムを SHA-256 にします
- テストする管理者と、ログインさせるメンバーにアプリを割り当てます
- IdP のメタデータ XML をダウンロードします
メール属性は、次の名前でも受け付けます。
http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddressurn:oid:0.9.2342.19200300.100.1.3
Actagate は署名済みアサーションのメール属性を、初回の紐づけに使える検証済みのメールアドレスとして扱います。IdP では、利用者が他人のメールアドレスを名乗れないように設定してください。
受け付けないメタデータ
Section titled “受け付けないメタデータ”次のメタデータは取り込めず、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 なら、ログインのときに拒否します。
2. Actagate で接続を追加する
Section titled “2. Actagate で接続を追加する”- 「設定」の「セキュリティ」(
/ws/settings/security) を開き、「シングルサインオン」の「プロバイダを選んで接続を追加」で「SAML 2.0」を開きます。接続のフォームが開きます - 「表示名」を入れ、「IdP メタデータ XML」に XML を貼り付けるか、「メタデータファイル」でファイルを選びます
- 「接続を追加」を押します。「接続を保存しました。」と表示され、「接続」の一覧に「下書き · 未テスト」の接続が増えます
3. IdP に SP の情報を登録する
Section titled “3. IdP に SP の情報を登録する”保存した接続に、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 |
表示された値をそのまま使います。
- IdP のアプリに、SP エンティティ ID を Audience として、ACS URL を Destination と Recipient として登録します。SP メタデータ URL を読み込める IdP なら、URL を渡すだけです
- アサーションの有効期限を 10 分以内にして保存します。これで IdP 側の準備は終わりです
時計のずれは 2 分まで許容します。ログインの要求の期限は 10 分です。
4. テストする
Section titled “4. テストする”- 接続の「テスト」を押します。IdP のサインイン画面に移ります
- 管理者自身の IdP のアカウントでサインインし、同じブラウザーで Actagate に戻ります。「テストに成功しました。接続を有効化できます。」と表示され、接続は「テスト済み」になります
テストは認証の確認だけです。利用者は作りません。
5. 有効化する
Section titled “5. 有効化する”- 接続の「有効化」を押します。「接続を有効にしました。ログイン画面から利用できます。」と表示され、状態が「有効」になります
IdP の entity ID、SSO URL、証明書、IdP 起点のログインの許可を変えると、テストの結果が消えて下書きに戻ります。利用者がこの接続でログインした後は、IdP の entity ID を変更できません。別の IdP に移るときは新しい接続を追加します。
IdP 起点のログイン
Section titled “IdP 起点のログイン”IdP のポータルから始めるログイン (IdP 起点) は、既定で無効です。理由は安全性です。IdP 起点ではログインを始めたブラウザーを確かめられないため、第三者のアカウントでログインさせられるリスクが残ります。必要なときだけ、接続の「設定を編集」で「IdP 起点のログインを許可する(既定では無効)」を選んで保存し、テストし直します。IdP 起点の応答では管理者のテストを完了できません。ログイン後の移動先は / です。
証明書を更新する
Section titled “証明書を更新する”署名証明書は 2 本まで含められるので、切り替えの間は両方を並べておきます。
- IdP で新しい証明書を作り、旧証明書と新証明書の両方を含むメタデータを書き出します
- 「設定を編集」でそのメタデータを保存し、テストして有効化します
- IdP の署名鍵を新しい証明書に切り替えます
- 旧証明書を外したメタデータを保存し、もう一度テストして有効化します
6. ログインを確かめる
Section titled “6. ログインを確かめる”- 招待済みの一般メンバーがログイン画面を開きます。「<表示名> で続ける」のボタンが出ています
- ボタンを押して IdP でサインインします。Actagate の画面が開きます
初回のログインでだけ、メール属性を招待済みメンバーのメールアドレスと照合し、そのメンバーに NameID を紐づけます。2 回目からは NameID で同じ人を特定するため、メールアドレスが変わっても同じアカウントのままです。初回の紐づけで管理者の権限は与えません。オーナーと管理者は、既存の方法でログインしてから「設定」の「ログイン方法」で「<表示名> を追加」を押して紐づけます。
7. 困ったとき
Section titled “7. 困ったとき”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 で困ったとき にまとめています。