シングルサインオン

1 回の認証で複数のアプリケーションやサービスにアクセスできる仕組み

認証アーキテクチャ

シングルサインオンとは

シングルサインオン (Single Sign-On, SSO) は、ユーザーが 1 回の認証で複数のアプリケーションやサービスにアクセスできる仕組みである。企業環境では、メール、チャット、CRM、経費精算、Wiki など数十のアプリケーションに個別のパスワードでログインする代わりに、1 回のログインですべてにアクセスできる。

SSO の認証フロー

1. ユーザーがアプリ A にアクセス
2. アプリ A が IdP (Identity Provider) にリダイレクト
3. ユーザーが IdP でログイン (ID/パスワード + MFA)
4. IdP がトークン (SAML アサーション or JWT) を発行
5. アプリ A がトークンを検証し、ログイン完了

6. ユーザーがアプリ B にアクセス
7. アプリ B が IdP にリダイレクト
8. IdP はすでにセッションがあるため、再認証なしでトークンを発行
9. アプリ B がトークンを検証し、ログイン完了 (パスワード入力なし)

メリット

  • ユーザー体験: パスワードの記憶・入力の負担が減る
  • セキュリティ: パスワードの使い回しが減り、MFA を一元的に適用できる
  • 管理効率: 退職時に IdP のアカウントを無効化するだけで全サービスへのアクセスを遮断
  • コンプライアンス: 認証ログを一元管理でき、監査が容易

実装プロトコル

プロトコル 形式 用途
SAML 2.0 XML ベース エンタープライズ (Okta, Azure AD)
OpenID Connect JSON/JWT ベース Web/モバイルアプリ
Kerberos チケットベース Windows Active Directory

SAML 2.0 はエンタープライズ環境で最も広く使われている。OpenID Connect は OAuth 2.0 の上に認証レイヤーを追加したもので、実装が容易だ。

AWS IAM Identity Center

AWS IAM Identity Center (旧 AWS SSO) は、AWS アカウントと SAML 対応アプリケーションへの SSO を提供する。

[ユーザー][IAM Identity Center] → AWS アカウント A (管理者ロール)
                                   → AWS アカウント B (開発者ロール)
                                   → Slack (SAML)
                                   → GitHub (SAML)
  • Active Directory や外部 IdP (Okta, Azure AD) と連携
  • AWS マネジメントコンソールと CLI (aws sso login) の両方に対応
  • アカウントごとに異なる権限セット (Permission Set) を割り当て

Cognito での SSO

自社アプリケーションに SSO を実装する場合、Cognito User Pool をフェデレーション IdP として使える。Google、Apple、Facebook のソーシャルログインや、企業の SAML IdP と連携する。

よくある落とし穴

セッション管理の不整合

SSO でログインしたユーザーが 1 つのアプリからログアウトしても、他のアプリのセッションが残る。シングルログアウト (SLO) を実装しないと、セキュリティリスクになる。

IdP の単一障害点

IdP がダウンすると、全アプリケーションにログインできなくなる。IdP の高可用性設計が重要だ。

体系的に学ぶなら関連書籍を参照してほしい。

関連用語