シングルサインオン
シングル サインオンは、企業の ID プロバイダーに一度ログインすると、別のパスワードを入力することなく、Salesforce、Slack、Jira、Notion、およびその他の 40 のアプリにアクセスできるコーポレート ID モデルです。シームレスなエクスペリエンスの背後には、2 つの競合するプロトコル (SAML と OIDC)、大量の XML、そして「アプリごとに異なるパスワード」を使用する方法よりも劇的に優れたセキュリティがあります。
記事全文は以下に英語で記載されています。
シングル サインオン (SSO) は、1 つのアイデンティティ プロバイダー (IdP) がユーザーを 1 回認証し、その後複数のサービス プロバイダー (SP) (実際のアプリケーション) にアサーションを発行する認証スキームです。ユーザーは 1 か所で資格情報を入力し、接続されているすべてのアプリにアクセスできるようになります。 SSO はエンタープライズ ID 管理の基盤であり、企業 IT がそのように見える理由です。
SSO が存在する理由
代替案 (各アプリには独自のユーザー データベース、パスワード要件、ログイン フローがあります) には明らかな問題があります。
- ユーザーはアプリごとに異なるパスワードを使用しており、パスワードの再利用や脆弱なパスワードにつながる
- オンボーディングには 30 以上のアカウントのプロビジョニングが必要ですシステム
- オフボードにはすべてのプロビジョニングを解除する必要があり、見逃されることがよくあります
- 誰が何にアクセスできるかを監査するのは悪夢です
- MFA構成はすべてのシステムにわたって増加します
SSOはアイデンティティを統合します。 1 つのアカウント、1 つの MFA セットアップ、1 つの場所でポリシーを適用します。 IdP で従業員を追加または削除すると、アクセスはあらゆる場所に伝播されます。
2 つのプロトコル
- SAML 2.0 (Security Assertion Markup Language、2005) — XML ベースで成熟し、企業内で主流です。ほとんどの従来の企業 SSO の背後にあるプロトコル。冗長で複雑で、セキュリティ上の落とし穴がたくさんありますが、広くサポートされています。
- OpenID Connect (OIDC) — JSON ベースで、よりシンプルで、OAuth 2.0 に基づいて構築されています。消費者および現代の企業で主流。すべての「サインイン...」ボタンで使用されます。
SAML と OIDC は同様のことを実現します。 SAML が最初に発生し、定着しました。 OIDC は、新しい展開の最新のデフォルトです。
SAML フロー
S簡略化:
- ユーザーがアプリ (SP) にアクセスします。 SP は有効なセッションを認識しません。
- SP は、SAML AuthnRequest を使用してユーザーのブラウザを IdP にリダイレクトします。
- IdP はユーザーを認証します (まだ認証されていない場合)。
- IdP は、ユーザーの ID、属性 (電子メール、部門、グループ)、および有効性を含む署名付き SAML アサーションを作成します。 window.
- IdP は、アサーションを使用してユーザーのブラウザを SP にリダイレクトします。
- SP は、IdP の署名を検証し、ユーザー情報を抽出し、セッションを作成します。
SP と IdP の間の署名関係は、事前に構成されます (公開キーが交換され、メタデータ XML が交換されます)。新しい SP-IdP 関係のブートストラップは SAML の主な操作作業です。
OIDC フロー
OIDC は OAuth 2.0 + ID クレーム:
- ユーザーは SP (OIDC では「証明書利用者」と呼ばれます) にアクセスします。
- RP はユーザーを
scope=openidを含む OAuth 認証リクエストを持つ IdP (「OpenID プロバイダー」)。 - IdP はユーザーを認証し、認証コードを発行します。
- RP は、ID トークン (ID クレームを含む署名付き JWT) とオプションのアクセス トークンおよびリフレッシュ トークンのコードを交換します。
- RP は、 IdP の公開された JWKS (JSON Web キー セット) に対する JWT 署名、クレームの抽出、セッションの作成。
ID トークンは SAML のアサーションと同等です。同じ役割で、XML ではなく JSON であり、多くの場合短いです。
ID アサーションの内容
SAML と OIDC の両方carry:
- Subject — ユーザーが誰であるか (IdP での一意の ID)
- Attributes /claims — 電子メール、名前、部門、役割、グループ メンバーシップ、使用される MFA、 etc.
- Validity — 発行時および有効期限のタイムスタンプ
- Signature — IdP が発行したことを証明
グループとロールの伝播
最も便利な SSO 機能の 1 つ: グループIdP からのメンバーシップが SP に流れます。 IdP の「エンジニアリング」グループは、Jira の「管理者」ロール、GitHub の「開発者」、Notion の「編集者」ロールにマッピングできます。 IdP でのグループの変更は、ユーザーの次のセッションに反映されます。これは集中プロビジョニングの魔法です。
SCIM: ログインだけでなくプロビジョニング
SSO はログインを処理します。 SCIM (クロスドメイン ID 管理システム) は、ログイン前にユーザー アカウントの作成、更新、削除を処理します。誰かを雇用すると、IdP は SCIM 経由で接続されているすべてのアプリにそのアカウントをプッシュします。彼らが去ると、アカウントはどこでも無効になるか削除されます。 SCIM + SSO + SAML/OIDC は、標準のエンタープライズ ID スタックです。
主要な ID プロバイダー
- Okta — エンタープライズ中心の強力な SCIM サポート、広範な SP エコシステム
- Microsoft Entra ID (旧 Azure AD) — エンタープライズで主流の Microsoft 365 にバンドル
- Google Workspace — Google のエコシステム上の組織向け IdP
- OneLogin、Ping Identity、JumpCloud — その他の主要な商用プロバイダー
- Keycloak、Authentik、Authelia — オープンソースのセルフホスト型オプション
SSO セキュリティ考慮事項
- IdP が単一障害点になります。 IdP がダウンすると、すべてがダウンします。 IdP が侵害されると、すべてが侵害されます。 IdP には最も強力な認証が必要です (管理者にはハードウェア キー MFA が必須)。
- SAML 署名バイパス。 数年間の CVE により、XML 署名検証を正しく実装するのが難しいことはよく知られています。適切に保守された SAML ライブラリを使用してください。
- RelayState 経由のオープン リダイレクト。 SP は、OAuth スタイルのオープン リダイレクト攻撃を防ぐために RelayState パラメーターを検証する必要があります。
- セッションの有効期間が一致しません。 IdP は「4 時間有効」と表示します。 SP は 30 日間のセッションを作成します。ユーザーが会社を辞めた場合。 SPセッションは継続します。定期的に再認証を強制します。
よくある質問
- SSO は個別のパスワードより安全ですか?
- 一般的にはそうです。 IdP でハードウェア MFA を備えた 1 つの強力なアカウントが多くのアプリに伝播され、多くの弱いパスワードを打ち破ります。トレードオフ: IdP は魅力的なターゲットです。 IdP の侵害 = すべての侵害。強力な MFA、条件付きアクセス、監査ログを使用して IdP を強化することが不可欠です。
- SSO プロバイダーがダウンした場合はどうなりますか?
- 回復するまで、接続されているアプリにログインできません。一部の重要な SaaS アプリは、非常に強力なローカル アカウントを提供します。多くの人はそうではありません。高可用性要件を持つ企業は、IdP 冗長性 (アクティブ/アクティブ地域展開) を維持するか、依存関係を受け入れます。
- 自宅でも同じ SSO を使用できますか?
- はい - 「Google/Apple/Microsoft でサインイン」ボタンはコンシューマ SSO です。一部のユーザーはさらに進んで、IdP (Keycloak、Authentik) を自己ホストして、ホーム サービスを単一ログインの背後に置きます。高度なホームラボに適した価格。一般的な家庭での使用には過剰です。
- SSO からサインアウトすると、一部のアプリでログアウトされるのはなぜですか?
- シングル ログアウト (SLO) — 構成すると、IdP からのサインアウトが接続されているすべてのアプリに反映されます。シングル サインオンは操作が面倒なため、シングル サインオンほど一般的ではありません。多くのアプリは、独自のセッションを個別に期限切れにするだけです。
- SAML は OIDC に置き換えられますか?
- 新しい展開では、ほとんどの場合、「はい」です。移行には費用がかかるため、既存の SAML デプロイメントは永続的です。最新の SaaS アプリのほとんどは両方をサポートしています。エンタープライズ環境には、テクノロジーのトレンドを超えて存続する SAML 専用アプリのロングテールが存在することがよくあります。