Help us improve the AWS re:Post Knowledge Center by sharing your feedback in a brief survey. Your input can influence how we create and update our content to better support your AWS journey.
如何對使用者在透過 SAML 聯合登入 Amazon Cognito 時收到的無效 SAML 回應錯誤進行疑難排解?
我想解決使用者透過 SAML 2.0 聯合登入 Amazon Cognito 時遇到的錯誤。
解決方法
檢閱 SAML 回應
在您的瀏覽器中檢閱 SAML 回應,該回應是由您的身分提供者 (IdP) 傳送至 Amazon Cognito 的。
**注意:**SAMLResponse 元素包含 Base64 編碼的回應。如果您在承載內容中看到百分比 (%) 字元,表示該回應同時經過 URL 編碼與 Base64 編碼。在此情況下,請先對 SAMLResponse 值進行 URL 解碼,然後再執行 Base64 解碼。
請檢查屬性對應
「此屬性為必要項」
您會收到以下錯誤訊息:
"Invalid SAML response received: Invalid user attributes: <attribute_name>: The attribute is required"
若要解決此問題,請完成以下步驟:
- 開啟 Amazon Cognito console (Amazon Cognito 主控台)。
- 在導覽窗格中,選擇 User pools (使用者集區),然後選取您的使用者集區。
- 在 Sign-up experience (註冊體驗) 下,記下您設定的必要屬性。
- 檢查您是否已為使用者集區設定屬性對應。如果尚未對應屬性,請 指定屬性對應。
- 在瀏覽器中擷取 SAML 回應。
- 在 AttributeStatement 欄位中,確認 IdP 是否包含必要屬性。
- 在 IdP 的屬性對應組態中,確認您已設定 IdP 傳送正確對應的必要屬性。
**注意:**您的 IdP 可能使用簡單名稱作為屬性對應,例如電子郵件地址或網址格式。URL 格式的屬性名稱範例為 http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress。
「無法刪除必要屬性」
您會收到以下錯誤訊息:
"Invalid SAML response received: Invalid user attributes: <attribute_name>: Required attribute cannot be deleted"
當 IdP 將必要屬性設為 null、刪除必要屬性,或在建立使用者後移除屬性對應時,就會發生此錯誤。
若要解決此問題,請對應所有必要屬性,並設定 IdP 傳送正確的屬性值。
如需詳細資訊,請參閱 對應須知。
檢查不可變屬性
**注意:**如果您在執行 AWS Command Line Interface (AWS CLI) 命令時收到錯誤訊息,請參閱對 AWS CLI 錯誤進行疑難排解。此外,請確定您使用的是最新的 AWS CLI 版本。
您會收到以下錯誤訊息:
"Invalid SAML response received: Invalid user attributes: <attribute_name>: Attribute cannot be updated"
當 IdP 傳送的屬性對應至 Amazon Cognito 的不可變屬性時,就會發生此錯誤。建立使用者集區後,您無法變更屬性的可變性。
若要解決此問題,請完成以下步驟:
- 執行以下 describe-user-pool 命令:
**注意:**將 USER-POOL-ID 替換為您的使用者集區 ID。aws cognito-idp describe-user-pool --user-pool-id USER-POOL-ID --query 'UserPool.SchemaAttributes[?Mutable==`false`].Name' - 在命令輸出中,記下所有不可變屬性。
- 開啟 Amazon Cognito console (Amazon Cognito 主控台)。
- 在 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 值不符。
若要解決此問題,請完成以下步驟:
- 在 IdP 應用程式組態頁面下載最新的中繼資料檔案。
**注意:**如果您的 IdP 透過公開網址提供 SAML 中繼資料,那麼您可以記下中繼資料文件網址並輸入該公開網址。 - 開啟 Amazon Cognito console (Amazon Cognito 主控台)。
- 在 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,或使用了其他使用者集區的 統一資源名稱 (URN) 時,就會發生這些錯誤。
若要解決此問題,請完成以下步驟:
- 開啟 Amazon Cognito console (Amazon Cognito 主控台)。
- 在導覽窗格中,選擇 User pools (使用者集區),然後選取要設定 SAML 整合的使用者集區。
- 在導覽窗格中選擇 Overview (概觀),並記下您的使用者集區 ID。
- 在 IdP 的 SAML 應用程式設定中,以 urn:amazon:cognito:sp:USER-POOL-ID 格式設定實體 ID。
注意: 使用您的 Amazon Cognito 使用者集區 ID 替換 USER-POOL-ID。
檢查 IdP 的判斷提示取用者 (ACS) 網址組態
您會收到以下錯誤訊息:
"An error was encountered with the requested page"
當您在 Amazon Cognito 受管登入頁面中錯誤設定 IdP 的判斷提示取用者服務 (ACS) 網址時,就會發生此錯誤。Amazon Cognito 只支援 POST 繫結方式作為端點。您的 IdP 必須以 POST 請求方式,將 SAML 回應傳送至端點。若 IdP 應用程式中的網址設定錯誤,IdP 會將 SAML 回應傳送至不正確的端點。
若要解決此問題,請在 IdP 應用程式中設定正確的 ACS 網址格式。
預設 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 啟動以及 服務提供者啟動 (SP-啟動) 的 SAML 登入流程中,原因如下:
- IdP 將 RelayState 參數設為 null,並在 SAML 回應中傳送至 Amazon Cognito。
- 您使用相同的 IdP 應用程式搭配不同的使用者集區。因此,SAML 請求中的 ACS 網址與 IdP 應用程式組態的 ACS 網址不符。
**注意:**對於 SP 啟動的 SAML 登入流程,Amazon Cognito 會在傳送給 IdP 的驗證請求中包含 RelayState 參數。驗證完成後,IdP 必須將 RelayState 參數回傳給 Amazon Cognito。對於 IdP 啟動的 SAML 登入流程,IdP 必須在傳送至 //saml2/idpresponse 端點的 SAML 判斷提示中包含 RelayState 參數。
若要解決 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 替換為您應用程式用戶端的回呼網址。
若要解決 ACS 網址問題,請完成以下步驟:
- 建立 HTTP 封存 (HAR) 檔案。
- 在瀏覽器的 Network (網路) 索引標籤中,找到包含 saml?SamlRequest 項目的請求。
- 記下請求參數中的 SAMLRequest。
- 使用您偏好的 SAML 解碼工具來解碼 SAMLRequest。
- 比較解碼後請求中的 ACS 網址與 IdP 組態中的 ACS 網址。
如果網址不同,請更新 IdP 組態,使其與 SAMLRequest 中的 ACS 網址一致。然後,從正確的使用者集區啟動聯合請求。
- 語言
- 中文 (繁體)

相關內容
- 已提問 2 年前
- 已提問 1 年前