技術共有

アーキテクチャに関するインタビュー - シナリオに関する質問 - シングル サインオン (SSO) の実装方法

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

概要

シングル サインオン (SSO) は、ユーザーが 1 つの資格情報を使用して複数のアプリケーションや Web サイトにログインできるようにする認証メカニズムです。つまり、ユーザーは、認証によってすべての承認されたサービスにアクセスできるようになります。

クッキーベース

親ドメインの Cookie メカニズムを使用して、メイン ドメイン名の下に共有 Cookie を設定し、サブドメイン名はこの Cookie を読み取ってユーザーの ID を確認できます。
この方法は、同じメイン ドメイン名の下にある複数のサブドメイン間の SSO に適していますが、メイン ドメイン名が異なる場合は適用できません。
利点: 実装が簡単で、同じメイン ドメイン名の下にある複数のサブドメインに適しています。
短所: クロスメイン ドメイン名には適しておらず、セキュリティが低く、中間者攻撃やクロスサイト スクリプティング (XSS) 攻撃に対して脆弱です。

トークンベース (OAuth、JWT)

ユーザーはアイデンティティ プロバイダーで認証した後、トークン (アクセス トークンや OAuth の JWT など) を取得します。
トークンはクライアント側 (Cookie、LocalStorage など) またはサーバー側 (Session など) に保存され、ユーザーが他のアプリケーションにアクセスするとき、アプリケーションはユーザーの ID を確認するためにトークンを使用します。
この方法はクロスドメインをサポートしており、トークンを暗号化できるため、より安全です。

利点: クロスドメインをサポートし、トークンを暗号化して送信できるため、セキュリティが向上し、トークンをオフラインで保存できるため、サーバーの負担が軽減されます。
欠点: トークンの漏洩を防ぐために、トークンの有効期間とセキュリティを適切に管理する必要があります。JWT が長すぎると、パフォーマンスに影響を与える可能性があります。

集中認証サービス (CAS、SAML)

集中認証サービスは単一のエントリ ポイントとして機能し、すべてのアプリケーションは認証にこれを利用します。
ユーザーが CAS/SAML サーバーにログインすると、CAS/SAML サーバーはチケットまたはアサーションを生成し、それをアプリケーションに渡します。アプリケーションはこのチケットまたはアサーションを使用して CAS/SAML サーバーと通信し、ユーザーのアイデンティティ。
CAS と SAML は、広く使用されている 2 つの集中認証プロトコルです。

利点: 標準化された SSO ソリューションを提供し、統合が容易で、さまざまなアプリケーションやサービスをサポートできます。
短所: 集中型サービスは単一障害点になる可能性があり、構成とメンテナンスが複雑です。

分散セッション:

共有セッション ストレージ (Redis、Memcached など) を使用すると、すべてのアプリケーションが同じセッション ストレージにアクセスできます。
ユーザーがいずれかのアプリケーションにログインすると、セッション情報が共有ストレージに書き込まれ、他のアプリケーションはこの共有セッションを読み取ることでユーザーのステータスを判断できます。

利点: アプリケーションのスケーラビリティと可用性が向上し、セッション データをクラスター内で共有できます。
短所: 共有ストレージ システムへの依存度が高まり、ストレージ システムの障害が SSO プロセス全体に影響します。

ライトウェイト ディレクトリ アクセス プロトコル (LDAP)

LDAP は、ネットワーク上のユーザーとグループの情報を保存および取得するために使用され、SSO をサポートします。
アプリケーションは LDAP サーバーにクエリを実行することでユーザーの ID を検証するため、各アプリケーションがユーザー情報を個別に保持する必要がなくなります。

利点: ユーザー情報の管理とクエリが簡単で、大規模なエンタープライズ環境に適しています。
短所: 設定と保守が比較的複雑で、小規模または一時的なプロジェクトには適していません。

OAuth 2.0/OIDC

OAuth 2.0 は、OAuth 2.0 上に構築された認証フレームワークであり、認証機能を提供します。
ユーザーが認可サーバーにログインすると、認可サーバーはクライアント アプリケーションにトークンを発行し、アプリケーションはこれらのトークンを使用してリソース サーバーにアクセスしたり、ユーザーの ID を確認したりします。

利点: 標準化されたインターフェイスで、サードパーティのアプリケーションを簡単に統合でき、複数の認証モードをサポートします。
短所: 実装には多くの詳細があり、セキュリティ対策を慎重に設計する必要があります。過剰な権限により問題が発生する可能性があります。

ケルベロス

Kerberos はネットワーク認証プロトコルであり、特に企業の内部ネットワーク環境に適しており、SSO をサポートしています。
Kerberos はチケット (チケット) メカニズムを使用してユーザーとサービスを認証します。ログイン後、ユーザーは一連のチケットを受け取り、これを使用してパスワードを再入力することなくネットワーク内の他のサービスにアクセスできます。

利点: セキュリティが高く、大規模な企業の内部ネットワークに適しています。複数の認証メカニズムをサポートしています。
短所: 構成が複雑で、保守コストが高いため、内部ネットワークに限定されており、インターネット環境には適していません。