SAML ユーザープール IdP 認証フロー - Amazon Cognito

SAML ユーザープール IdP 認証フロー

ユーザープールから直接、SAML ベースの IdP を統合できます。

  1. アプリはユーザーに AWS によってホストされる UI を指定することで、サインアップとサインインを開始します。モバイルアプリはウェブビューを使用して AWS によってホストされているウェブページを表示することができます。

  2. 通常、ユーザープールはユーザーの E メールアドレスからユーザーの IdP を判断します。

    また、アプリがユーザーをユーザープールにダイレクトする前に情報を収集した場合は、クエリパラメータを通じてその情報を Amazon Cognito に提供することができます。

  3. ユーザーは、IdP にリダイレクトされます。

  4. 必要に応じて IdP がユーザーを認証します。IdP がユーザーにアクティブなセッションがあると認識している場合、IdP で認証がスキップされ、シングルサインイン (SSO) が提供されます。

  5. IdP は Amazon Cognito サービスに SAML アサーションを POST します。

    注記

    Amazon Cognito は 5 分以内に完了しない認証リクエストをキャンセルし、ホストされた UI にユーザーをリダイレクトします。ページには、Something went wrong というエラーメッセージが表示されます。

  6. SAML アサーションが検証され、アサーションからユーザー属性 (クレーム) が収集されると、Amazon Cognito がユーザープールのユーザープロファイルを内部で作成または更新します。Amazon Cognito が、サインインされたユーザーの OIDC トークンをアプリに返します。

次の図は、このプロセスの認証フローを示しています。


                    Amazon Cognito がユーザープールでの SAML IdP を使用した場合の認証フロー図。

ユーザーが認証されると、ユーザープールから ID、アクセス、更新トークンが返されます。ID トークンは ID 管理用の標準 OIDC トークンであり、アクセストークンは標準 OAuth 2.0 トークンです。ID とアクセストークンは 1 時間後に期限切れになります。アプリケーションは更新トークンを使用して、ユーザーを再認証しなくても、新しいトークンを取得できます。

デベロッパーは、更新トークンの有効期限を選択できます。つまりユーザーが再認証する必要がある頻度が変わります。ユーザーが外部 IdP 経由で認証された (フェデレーティッドユーザーなど) 場合でも、アプリケーションは外部 IdP トークンの有効期限にかかわらず、更新トークンと共にアプリケーションは Amazon Cognito トークンと更新トークンを使用して、ユーザーの再認証までの時間を判断します。ユーザープールは更新トークンを自動的に使用し、失効したときに新しい ID トークンとアクセストークンを取得します。更新トークンも失効している場合、AWS がホストするアプリのページ経由で認証が自動的にサーバーで開始されます。

SAML ユーザー名の大文字と小文字の区別

フェデレーティッドユーザーがサインインしようとすると、SAML ID プロバイダー (IdP) はユーザーの SAML アサーションで IdP ディレクトリから Amazon Cognito に一意の NameId を渡します。Amazon Cognito は、SAML フェデレーティッドユーザーを NameId クレームによって識別します。ユーザープールの大文字と小文字の区別設定にかかわらず、Amazon Cognito では、SAML IdP のフェデレーティッドユーザーが、一意の大文字と小文字を区別する NameId クレームを渡す必要があります。email のような属性を NameId にマッピングし、ユーザーがメールアドレスを変更すると、アプリケーションにサインインできません。

変更されない値を持つ IdP 属性から SAML アサーションに NameId をマッピングします。

例えば、Carlos は、Carlos@example.comNameId 値を渡した Active Directory フェデレーションサービス (ADFS) SAMLアサーションからの大文字と小文字を区別しないユーザープールにユーザープロファイルを持っているとします。次回 Carlos がサインインしようとすると、ADFS IdP は carlos@example.comNameId 値を渡します。NameId は大文字と小文字が完全に一致する必要があるため、サインインは成功しません。

NameID を変更した後、ユーザーがログインできない場合は、ユーザープールからそのユーザーのプロファイルを削除してください。Amazon Cognito は、次回サインインしたときに新しいユーザープロファイルを作成します。