スキップしてコンテンツを表示

ユーザーが Amazon Cognito へのフェデレーションを行う際に発生する、SAML 応答エラーのトラブルシューティング方法を教えてください。

所要時間3分
0

ユーザーが SAML 2.0 で Amazon Cognito へのフェデレーションを行う際に、発生するエラーを解決したいと考えています。

解決策

SAML 応答を確認する

ID プロバイダー (IdP) が Amazon Cognito に送信した SAML 応答を、ブラウザで確認します。

注: SAMLResponse 要素には、base64 エンコードされた応答が含まれています。ペイロードにパーセント (%) の文字が含まれている場合は、その応答は URL エンコードおよび base64 エンコードが行われています。この場合は、SAMLResponse の値に URL デコードを行った後、base64 デコードを適用します。

属性マッピングを確認する

"The attribute is required"

次のエラーメッセージが表示されます。

"Invalid SAML response received: Invalid user attributes: <attribute_name>: The attribute is required"

この問題を解決するには、次の手順を実行します。

  1. Amazon Cognito コンソール を開きます。
  2. ナビゲーションペインで [ユーザープール] を選択し、目的のユーザープールを選択します。
  3. [サインアップエクスペリエンス] に表示される、設定した必須属性を書き留めます。
  4. ユーザープールに属性マッピングを設定したかどうかを確認します。属性がマッピングされていない場合は、属性マッピングを指定します。
  5. ブラウザで SAML 応答を取得します。
  6. AttributeStatement フィールドにおいて、IdP に必須属性が含まれているかどうかを確認します。
  7. IdP の属性マッピング構成において、IdP が適切なマッピングにより、必須属性を送信する設定が行われていることを確認します。

注: 使用する IdP によっては、属性マッピングにシンプルな名前 (メールアドレスや URL 形式) を指定する場合があります (URL 形式の属性名例: http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress)。

"Required attribute cannot be deleted"

次のエラーメッセージが表示されます。

"Invalid SAML response received: Invalid user attributes: <attribute_name>: Required attribute cannot be deleted"

IdP により、必須属性が null に設定された場合、必須属性が削除された場合、またはユーザーが作成した属性マッピングが削除された場合、上記のエラーが発生します。

この問題を解決するには、すべての必須属性をマッピングし、IdP が属性の適切な値を送信するよう設定を行います。

詳細については、「マッピングに関する考慮事項」を参照してください。

不変属性がないか確認する

注: AWS コマンドラインインターフェイス (AWS CLI) コマンドの実行中にエラーが発生した場合は、「AWS CLI で発生したエラーのトラブルシューティング」を参照してください。また、AWS CLI の最新バージョンを使用していることを確認してください。

次のエラーメッセージが表示されます。

"Invalid SAML response received: Invalid user attributes: <attribute_name>: Attribute cannot be updated"

このエラーは、IdP が不変の Amazon Cognito 属性にマッピングされた属性を渡した場合に発生します。ユーザープールを作成した後に、属性の可変性は変更できません。

この問題を解決するには、次の手順を実行します。

  1. 次の describe-user-pool コマンドを実行します。
    aws cognito-idp describe-user-pool --user-pool-id USER-POOL-ID --query 'UserPool.SchemaAttributes[?Mutable==`false`].Name'
    注: USER-POOL-ID をユーザープール ID に置き換えてください。
  2. コマンドの出力に表示される、すべての不変属性を書き留めます。
  3. Amazon Cognito コンソール を開きます。
  4. IdP の SAML 属性マッピングにおいて、SAML 属性が Amazon Cognito の不変属性にマッピングされているかどうかを確認します。SAML 属性が不変属性にマッピングされている場合は、そのマッピングを削除します。
    注: SAML 属性をマッピングする必要がある場合は、既存の可変属性にマッピングします。または、SAML 属性にマッピングできるカスタム可変属性を作成してもかまいません。

マッピングされた属性が必要な場合は、可変性を適切に設定した新しいユーザープールを作成し、新しいユーザープールにユーザーをインポートします。

SAML 応答と、IdP のメタデータ XML ファイルの値を比較します。

次のエラーメッセージが表示されます。

"Invalid SAML response received: SAML Response signature is invalid"

このエラーは、IdP が自身の SAML 署名証明書を更新した場合に発生します。更新が行われると、SAML 応答と IdP のメタデータ XML ファイルにおいて、X509Certificate 値が一致しなくなります。

この問題を解決するには、次の手順を実行します。

  1. IdP のアプリケーション設定ページで最新のメタデータファイルをダウンロードします。
    注: IdP がパブリック URL 経由で SAML メタデータを提供する場合は、メタデータドキュメントの URL を書き留め、そのパブリック URL を入力します。
  2. Amazon Cognito コンソール を開きます。
  3. SAML IdP の設定において、既存のメタデータファイルを新しいメタデータファイルに置き換えます。

エンティティの ID と URN を確認する

次のいずれかのエラーメッセージが表示されます。

"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 で設定したエンティティ ID が誤っているか、他のユーザープールの Uniform Resource Name (URN) を指定した場合に発生します。

この問題を解決するには、次の手順を実行します。

  1. Amazon Cognito コンソール を開きます。
  2. ナビゲーションペインで [ユーザープール] を選択し、SAML 統合用に構成するユーザープールを選択します。
  3. ナビゲーションペインで [概要] を選択し、ユーザープール ID を書き留めます。
  4. IdP の SAML アプリケーション設定において、エンティティ ID を次の形式で構成します: urn:amazon:cognito:sp:USER-POOL-ID
    注: USER-POOL-ID を Amazon Cognito のユーザープール ID に置き換えてください。

IdP のアサーションコンシューマー (ACS) URL 設定を確認する

次のエラーメッセージが表示されます。

"An error was encountered with the requested page" (リクエストしたページでエラーが発生しました)

IdP のアサーションコンシューマーサービス (ACS) URL に設定ミスがある場合、上記のエラーが Amazon Cognito マネージドログインページで発生します。Amazon Cognito は、エンドポイントでは POST のバインドのみをサポートします。IdP は、POST リクエストに SAML 応答を含め、エンドポイントに送信する必要があります。IdP のアプリケーションで設定した URL に誤りがある場合、IdP は、誤ったエンドポイントに SAML 応答を送信します。

この問題を解決するには、適切な ACS URL 形式を指定して IdP のアプリケーションを構成します。

デフォルトの Amazon Cognito ユーザープールドメインの形式例を次に示します: https://YOUR-USER-POOL-DOMAIN.auth.REGION.amazoncognito.com/saml2/idpresponse

カスタムユーザープールドメインの形式例を次に示します: https://YOUR-USER-POOL-DOMAIN/saml2/idpresponse

注: YOUR-USER-POOL-DOMAIN をユーザープールドメインに置き換えてください。

IdP がサポートしているサインインのタイプを確認する

次のいずれかのエラーメッセージが表示されます。

"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"

IdP が開始した SAML サインインフローでも、サービスプロバイダー (SP) が開始したフローでも、次の原因で上記のエラーが発生します。

  • IdP により、Amazon Cognito への SAML 応答に含まれる RelayState パラメータが null に設定された。
  • 同じ IdP アプリケーションを別のユーザープールで使用した。その場合、SAML リクエストに含まれる ACS URL は、IdP のアプリケーション構成における ACS URL と一致しなくなります。

注: SP が開始したサインインフローでは、Amazon Cognito は、IdP への認証リクエストに RelayState パラメータを含めます。認証後、IdP は RelayState パラメータを Amazon Cognito に返す必要があります。IdP が開始する SAML サインインフローでは、IdP は、/saml2/idpresponse エンドポイントに対する RelayState パラメータおよび SAML アサーションを含める必要があります。

RelayState に関する問題を解決するには、SAML IdP が SP が開始する SAML サインインのみをサポートしているか、IdP、SP 両者が開始する SAML サインインをサポートしているかを確認します。

IdP が SP が開始する SAML サインインフローをサポートしている場合は、Amazon Cognito から認証フローを始め、フェデレーションリクエストを開始します。マネージドログインエンドポイント /login を使用すると、ユーザーをサインインエンドポイントにリダイレクトできます。または、リダイレクトと認証用エンドポイントである /oauth2/authorize を使用します。

IdP が IdP が開始する SAML サインインエンドポイントをサポートしている場合は、SAML IdP において、RelayState パラメータを次の形式で構成します: identity_provider=ID-PROVIDER-NAME&client_id=CLIENT-ID&redirect_uri=CALLBACK-URL&response_type=code&scope=openid+email+phone

注: ID-PROVIDER-NAME を実際の SAML IdP 名に置き換えてください。さらに、CLIENT-ID をユーザープールのアプリクライアント ID に、CALLBACK-URL をアプリクライアント ID のコールバック URL に置き換えてください。

ACS URL に関する問題を解決するには、次の手順を実行します。

  1. HTTP アーカイブ (HAR) ファイルを作成します
  2. ブラウザの [ネットワーク] タブから、saml?SamlRequest というエントリを含むリクエストを探します。
  3. リクエストパラメータの SAMLRequest を書き留めます。
  4. 任意の SAML デコードツールで SAMLRequest をデコードします。
  5. デコードされたリクエストと IdP 構成における ACS URL を比較します。

URL が異なっている場合は、IdP 構成を更新し、SAMLRequest の ACS URL と一致させます。次に、フェデレーションリクエストを適切なユーザープールから開始します。

AWS公式更新しました 5年前
コメントはありません

関連するコンテンツ