シングルサインオン
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 の高可用性設計が重要だ。
体系的に学ぶなら関連書籍を参照してほしい。