Cognitoを認証基盤としてSaaSにGoogleアカウントでログインさせる際の仕組みがよくわかっていなかったので、関連用語から整理します。
User Pool
CognitoのUser Poolはユーザーの認証を管理するディレクトリ
- ユーザー名・メールアドレス・パスワードなどの情報を保持する
- SAMLやOpenID Connectで外部IdP(Googleアカウントなど)を使う場合、User Poolは「どのIdPを認証に使うか」を知っておく必要がある.
Identity Provider(IdP)
IdPは実際にユーザーの認証を行うサービス - GoogleアカウントがIdPの場合、SAML認証でGoogleが「このユーザーは正しい」とCognitoに返す情報(Assertion)に基づいて、SaaSにログインできる.
User Pool Client
User Pool ClientはCognito User PoolとSaaSアプリをつなぐ窓口.
- クライアントIDを持っていて、アプリがCognitoにログイン要求を送る時に使う.
- このクライアントに対して、どのIdPを使うか(Googleなど)、どの認証フローを許可するか(SAML、OpenID Connectなど)を設定する.
- Callback URL: 認証後、ユーザーがSaaSに戻るURL.
- Logout URL: ログアウト後にユーザーを遷移させるURL.
Identity Pool
Identity Poolは通常、認証後のユーザーにAWSリソースへのアクセス件を付与する仕組みで、SaaSログインにも使える.
- Cognitoで認証したユーザーの情報を、SaaSアプリ側で受け取りログイン済みユーザーとして扱うことが可能になる.
Googleアカウントを使う場合のSAMLフロー
- SaaSアプリ(User Pool Client)がCognitoのHosted UIにリダイレクト.
- ユーザーがGoogleアカウントでログイン.
- GoogleがSAML AssertionをCognitoに返す.
- CognitoがUser Pool ClientのCallback URLにユーザーを戻す.
- SaaSアプリ側でユーザー情報を受け取りログイン完了.
なんとなく仕組みはわかってきたので手を動かして検証もしてみます。