Amazon Cognito へのフェデレーション時にユーザーが受け取る可能性がある無効な SAML レスポンスエラーをトラブルシューティングするにはどうすればよいですか?
ユーザーがセキュリティアサーションマークアップ言語 2.0 (SAML 2.0) を使用して Amazon Cognito にフェデレートする際に発生する可能性のあるエラーをトラブルシューティングする必要があります。
解決策
Amazon Cognito は、ID プロバイダー (IdP) と SAML 2.0 による認証をサポートしています。ユーザーが SAML を使用して Amazon Cognito にフェデレーションするときに発生する可能性のある一般的なエラーがあります。
注:全体を通して、<attribute_name> を自分のエラーシナリオのユーザー属性に置き換えてください。
SAML レスポンスを表示する
一般的な SAML フェデレーションエラーを解決するには、IdP から Amazon Cognito ユーザープールに送信される SAML レスポンスを確認します。SAML レスポンスをキャプチャしてデコードする方法については、「ブラウザで SAML レスポンスを表示する」を参照してください。
注: SAMLResponse 要素には、base64 でエンコードされたリクエストが含まれています。% 文字があるペイロードは、base64 に加えて URL でエンコードされていることを示します。base64 デコード用に送信する前に、SAMLResponse 値に対して URL デコードを実行してください。
無効な SAML レスポンスエラーを解決する
「Invalid SAML response received: Invalid user attributes: <attribute_name>: The attribute is required.」
このエラーは、ユーザープールに必須属性が設定されているのに、IdP が必須属性のクレームを渡していない場合に発生します。このエラーは、必須属性の属性マッピングが利用できない場合にも発生します。
このエラーを解決するには、以下の手順を実行します。
1. Amazon Cognito コンソールを開きます。
2. ユーザープールを選択します。
3. ユーザープールに関する情報を確認します。[サインアップエクスペリエンス] で設定されている必須属性を書き留めておきます。
4. ブラウザで SAML レスポンスを取得して確認します。
5. IdP がレスポンスの AttributeStatement フィールドに必須属性のクレームをすべて渡しているかどうかを確認します。IdP が SAML レスポンスで必須属性をすべて送信していない場合は、IdP の属性マッピング設定を確認します。IdP が必須属性の正しいマッピングを送信するように設定されていることも確認します。
注: ご利用の IdP が、他のサンプル SAML アサーションを参照用として提供していることがあります。アサーションを確認すると、IdP のマッピングされた属性に関する詳細を取得できます。IdP によっては、属性マッピングで E メールアドレスのような単純な名前を使用するものもあれば、次の例のように URL 形式の属性名を使用するものもあります。
http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress
6. SAML レスポンスに必須属性が含まれていても同じエラーが表示される場合は、Amazon Cognito 属性のマッピングを確認します。必須属性のマッピングが見つからない場合は、属性のクレームにマッピングを追加します。属性マッピングを追加する方法については、「ユーザープールの ID プロバイダー属性マッピングを指定する」を参照してください。
「Invalid SAML response received: Invalid user attributes: <attribute_name>: Required attribute cannot be deleted.」
このエラーは、IdP で必須属性が変更され、必須属性が NULL になる、または削除される場合に発生します。このエラーは、ユーザーが作成された後にマッピングが削除された場合にも発生します。
このエラーを解決するには、以下の手順を実行します。
1. Amazon Cognito コンソールを開きます。
2. お使いの Amazon Cognito ユーザープールを選択します。
3. ユーザープールに関する情報を確認します。設定した必須属性を書き留めておきます。
4. ブラウザで SAML レスポンスを取得して確認します。
5. IdP がレスポンスの AttributeStatement フィールドに必須属性のクレームをすべて渡しているかどうかを確認します。IdP が SAML レスポンスで必須属性をすべて送信していない場合は、IdP の属性マッピング設定を確認します。IdP が必須属性を正しいマッピングで送信するように設定されていることを確認してください。
6. すべての必須属性が有効な値とともに SAML レスポンスで渡された場合は、IdP 属性のマッピングを確認します。必須属性がすべてマッピングされていることを確認してください。
注: IdP の必須属性が削除された後や NULL になった後、フェデレーションリクエスト中に次のエラーが表示されることがあります。 「Invalid SAML response received: Invalid user attributes: <attribute_name>: Required attribute cannot be deleted.」 このエラーは、ユーザーが作成された後にマッピングが削除された場合にも発生します。このエラーを解決するには、前の手順に従って、必須属性のマッピングが存在することを確認してください。その後、必須属性に対して正しい値が IdP から渡されます。
「Invalid SAML response received: Invalid user attributes: <attribute_name>: Attribute cannot be updated.」
このエラーは、IdP から属性が渡されたが、マッピングされた Amazon Cognito 属性が変更不可 (「mutable」:「false」) に設定されている場合に発生します。ユーザープールの作成後に属性の変更可能性の設定を変更することはできません。このエラーを解決するには、SAML 属性を変更不可の属性にマップする属性マッピングルールを削除する必要があります。
このエラーを解決するには、以下の手順を実行します。
1. 次の AWS コマンドラインインターフェイス (AWS CLI) コマンドを実行し、出力で返された属性を書き留めます。出力で返される属性はすべて変更不可です。
注: <userpool_id> をユーザープール ID で置き換えてください。
aws cognito-idp describe-user-pool --user-pool-id <userpool_id> --query 'UserPool.SchemaAttributes[?Mutable==`false`].Name'
注: AWS CLI コマンドを実行する際にエラーが発生する場合は、AWS CLI の最新バージョンを使用しているかを確認してください。
2. Amazon Cognito コンソールを開きます。
3. プロバイダーの SAML 属性マッピングを確認してください。
4. SAML 属性のいずれかが、コマンド出力で返される Amazon Cognito 属性にマップされているかどうかを確認します。変更不可の属性へのマッピングがある場合は、そのマッピングを削除します。その SAML 属性をマップする必要がある場合は、既存の変更可能である属性にマップします。変更可能なカスタム属性を作成し、SAML 属性を変更可能なカスタム属性にマップすることもできます。
マッピングされた属性が必要なため、既存のユーザープールでマッピングを削除するために実行できる回避策はありません。必要な変更可能性の設定を使用して新しいユーザープールを作成し、新しいユーザープールにユーザーを移行させる必要があります。
「Invalid SAML response received: SAML Response signature is invalid.」
このエラーは、IdP が SAML 署名証明書を変更したときに発生します。この問題をトラブルシューティングするには、Amazon Cognito にフェデレーションしたときに受け取る SAML レスポンスを確認します。X509Certificate フィールドに入力された値を書き留めておきます。SAML レスポンス内のこの X509Certificate 値を、IdP 設定用に Amazon Cognito にアップロードされたメタデータ XML ファイル内の X509Certificate 値と比較します。値が異なる場合、IdP が使用する SAML 署名証明書が更新されていることを意味します。
このエラーを解決するには、以下の手順を実行します。
1. IdP のアプリケーション設定ページに移動し、更新されたメタデータファイルを取得します。
2. Amazon Cognito コンソールを開きます。
3. お使いの SAML IdP の設定に移動します。
4. 既存のメタデータファイルを更新されたメタデータファイルに置き換えます。
-または-
IdP がパブリック URL 経由で SAML メタデータを提供している場合は、メタデータドキュメントの URL をコピーします。メタデータファイルをアップロードする代わりに、そのパブリック URL を貼り付けます。
「Invalid SAML response received: Audience restriction in SAML Assertion does not allow it for urn:amazon:cognito:sp:xxxxxxxx.」
-または-
「Invalid SAML response received: Application with identifier 'urn:amazon:cognito:sp:xxxxxxxx' was not found.」
注: エラーメッセージは IdP によって異なります。
このエラーは、IdP でエンティティ ID を誤って設定した場合に発生します。このエラーは、別のユーザープールの URN をエンティティ ID として使用した場合にも発生します。
このエラーを解決するには、以下の手順を実行します。
1. Amazon Cognito コンソールを開きます。
2. [ユーザープール] を選択し、ユーザープール ID を書き留めます。
3. IdP の SAML アプリケーション設定に移動し、エンティティ ID を次の形式で設定します。
注: <user_pool_id> を Amazon Cognito のユーザープール ID で置き換えてください。
urn:amazon:cognito:sp:<user_pool_id>
「An error was encountered with the requested page.」
このエラーは Amazon Cognito のホストされた UI ページで発生します。このエラーメッセージに他のエラーステートメントがない場合は、アプリケーションのアサーションコンシューマーサービス (ACS) URL が正しく設定されていないことを示しています。IdP は ACS URL を使用して Amazon Cognito に SAML レスポンスを送信します。ACS URL は次の形式に従います。
注: <your_user_pool_domain> ユーザープールドメインに置き換えてください。
https://<your_user_pool_domain>/saml2/idpresponse
Amazon Cognito はエンドポイントの POST バインディングのみをサポートしています。IdP は POST リクエストで SAML レスポンスをエンドポイントに送信する必要があります。IdP のアプリケーションでこの URL を誤って設定すると、IdP は間違ったエンドポイントに SAML レスポンスを送信します。その結果、400 エラーとフェデレーション障害が発生します。
このエラーを解決するには、以下の手順を実行します。
1. IdP のアプリケーション設定に移動し、次のいずれかの形式を使用して ACS URL を設定します。
Cognito ドメイン:
https://<your_user_pool_domain>.auth.<region>.amazoncognito.com/saml2/idpresponse
カスタムドメイン:
https://<your_user_pool_domain>/saml2/idpresponse
「An error was encountered with the requested page: Invalid relayState from identity provider.」
-または-
「An error was encountered with the requested page: Invalid samlResponse or relayState from identity provider.」
このエラーは、以下の原因により発生します。
- SAML レスポンスが Amazon Cognito に送信されると、RelayState パラメータは IdP によって NULL に設定されます。
- SAML リクエストの ACS URL が、IdP のアプリケーションで設定されている ACS URL と同じではありません。
Amazon Cognito は、認証リクエストを IdP に転送するときに RelayState パラメータを生成します。認証に成功したら、この RelayState パラメータを IdP から Amazon Cognito に返す必要があります。
SAML フェデレーションでは、ユーザープールがアプリケーションに代わってサービスプロバイダーとして機能します。サービスプロバイダーとして、Amazon Cognito はサービスプロバイダー主導のシングルサインオン (SSO) フローのみをサポートします。IdP が開始したフローはサポートされていません。IdP からフェデレーションリクエストが開始されると、IdP の必須属性が削除されるか、NULL に変更されます。フェデレーション障害とは、前述のエラーメッセージを含む結果です。
このエラーを解決するには、IdP の代わりに Amazon Cognito からフェデレーションリクエストを開始します。Amazon Cognito からフェデレーションを開始するには、以下のいずれかのステップを実行して認証フローを開始します。
- サインイン用の /login エンドポイントに、ユーザーをリダイレクトします。/login エンドポイントがログインページを読み込んで、クライアント認証オプションをユーザーに表示します。ユーザーがアプリケーションにサインインして IdP にリダイレクトされるためにさまざまなオプションを確認する必要がある場合は、/login エンドポイントに接続します。
- Amazon Cognito の /oauth2/authorize エンドポイントにリクエストを送信します。/oauth2/authorize エンドポイントは、2 つのリダイレクト先をサポートするリダイレクションエンドポイントです。URL に identity_provider または idp_identifier パラメーターを含めると、ユーザーは IdP のサインインページにシームレスにリダイレクトされます。ホスト UI のデフォルトレイアウトをスキップして IdP ページに直接リダイレクトするためにこのオプションを使用することも考えられます。
このエラーは、同じ IdP アプリケーションのフェデレーションリクエストが別のユーザープールからのものである場合に、ACS URL が異なる場合にも発生します。エラーを調査して解決するには、次の手順に従います。
1. Amazon Cognito にフェデレーションする際に、HTTP アーカイブ (HAR) ファイルをキャプチャします。
2. ブラウザの [ネットワーク] タブで、saml?SamlRequest エントリでリクエストを見つけて、そのリクエストを開きます。
3. リクエストパラメータに指定された SAMLRequest をコピーします。
4. お好みの SAML デコードツールを使用して SAMLRequest をデコードします。その後、SAMLRequest で送信された ACS URL が、IdP のアプリケーションで設定されている ACS URL と同じかどうかを確認します。
SAMLRequest の値が異なる場合、エラーが確認されます。
5. エラーを解決するために、IdP の設定を確認します。アプリケーションに設定されている ACS URL が SAMLRequest で送信された ACS URL と同じであることを確認してください。
同じ IdP アプリケーションに対して異なるユーザープールからフェデレーションリクエストが生成された場合、ACS URL は異なります。フェデレーションリクエストは必ず適切なユーザープールから開始してください。
関連するコンテンツ
- 質問済み 2年前lg...
- 質問済み 9ヶ月前lg...