為什麼我的 SAML 驗證請求失敗?

您在 SAML 驗證時遇到問題。

為什麼我的 SAML 訊息簽章無法驗證?

測試應用程式時,收到下列錯誤訊息:

The SAML message signature could not be validated

App ID 無法驗證 SAML 傳送的簽章時,會發生此錯誤。

若要解決此問題,請驗證配置中是否已將入埠簽章設為

為何鑑別回應中遺漏 RelayState 參數?

鑑別回應遺漏 RelayState 參數。

App ID 在鑑別要求之中會傳送一個不易解讀的參數,稱為 RelayState。 如果您未在回應中看到該參數,則表示您的身分提供者可能未配置成正確地傳回該參數。 RelayState 採用下列格式。

https://idp.example.org/SAML2/SSO/Redirect?SAMLRequest=request&RelayState=token

請驗證已配置您的 SAML 提供者,將 RelayState 參數傳回給 App ID,而未以任何方式修改。

為何我收到關於「名稱 ID」的錯誤?

傳送鑑別要求時,您收到有關 NameID 的錯誤。

App ID 作為服務提供者,定義了服務及身分提供者識別使用者的方式。 使用 App ID,使用者會在 NameID 鑑別要求的 NameID 欄位中識別,如下列範例所示。

<NameIDFormat>urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress</NameIDFormat>

若要解決此問題,身分提供者 NameID 務必要格式化為電子郵件位址。 確認身份供應商登記冊中的所有使用者都有有效的電子郵件地址格式。 然後,驗證 NameID 欄位的定義是否正確,以便永遠傳回有效的電子郵件 - 即使註冊表中的使用者有多個電子郵件。

無法將回應解密

您收到下列其中一則錯誤訊息,以回應您的鑑別要求。

錯誤訊息 1:

Unexpectedly received an encrypted assertion. Please enable response encryption in your App ID SAML configuration.

錯誤訊息 2:

Could not decrypt SAML assertion. Ensure your SAML provider is configured with the App ID encryption.

如果您的身分提供者配置為要加密,則必須配置 App ID 來簽署 SAML 鑑別要求 (AuthnRequest)。 然後,您的身分提供者必須配置為預期對應的配置。 由於下列其中一個原因,您可能會收到這些錯誤:

  • App ID 未配置為預期身分提供者 SAML 回應已加密。
  • App ID 無法正確地將您的主張解密。

如果收到錯誤訊息 1,請驗證 SAML 配置已設為預期回應已加密。 依預設,App ID 不會預期回應要加密。 若要配置加密,請使用 encryptResponseAPI** 將 ** 參數設為 true

如果收到錯誤訊息 2,請確定您的憑證正確。 您可以從 App ID meta 資料 XML 檔取得簽署憑證。 請務必使用 <KeyDescriptor use="signing">。 請驗證身分提供者已配置成使用 `` 作為簽章的簽署演算法。

回應者錯誤碼

當您傳送驗證要求時,您會收到下列一般錯誤訊息:

urn:oasis:names:tc:SAML:2.0:status:Responder

雖然 App ID 會傳送起始鑑別要求,但身分提供者必須執行使用者鑑別並傳回回應。 有幾種原因可能會導致您的身份提供者產生此錯誤訊息。

如果您的身分提供者有下列情形,您可能會看到訊息:

  • 找不到或無法驗證使用者名稱。
  • 不支援在鑑別要求 (NameID) 中定義的 AuthnRequest 格式。
  • 不支援鑑別環境定義。
  • 需要簽署鑑別要求,或在簽章中使用特定的演算法。

若要解決此問題,請驗證您的配置及使用者名稱。 請確認您已定義正確的鑑別環境定義和變數。 檢查您的請求是否需要以特定方式簽署。

不受支援的鑑別要求

您收到一則關於不支援的驗證請求的訊息。

當 App ID 產生鑑別要求時,它可以使用鑑別環境定義來要求鑑別和 SAML 主張的品質。

若要解決此問題,您可以更新鑑別環境定義。 依預設,App ID 會使用鑑別類別 urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport 和比較 exact。 您可以使用 API 更新環境定義參數,以符合您的使用案例。

SAML 要求簽署失敗

您收到一個錯誤,指出無法驗證鑑別要求。

App ID 可以配置為簽署 SAML 鑑別要求 (AuthNRequest),但您的身分提供者必須配置為預期對應的配置。

若要解決此問題,請執行下列動作:

  • 驗證 IBM Cloud 已配置為簽署鑑別要求,方法是使用 signRequestset SAML IdP APItrue,將 參數設為 。 您可以透過查看請求 URL 來檢查您的驗證請求是否已簽署。 簽章已包含為查詢參數。 例如: https://idp.example.org/SAML2/SSO/Redirect?SAMLRequest=request&SigAlg=value&Signature=value&RelayState=token

  • 驗證您的身分提供者已使用正確的憑證進行配置。 若要取得簽章憑證,請檢查您從 IBM Cloud 面板下載的 IBM Cloud metadata XML 檔案。 確保使用 <KeyDescriptor use="signing"> 的按鍵。

  • 驗證身分提供者已配置成使用 `` 作為簽署演算法。

為什麼我的驗證方法不匹配?

您會收到所提供的驗證方法與要求的驗證方法不符的訊息。

例如:

AADSTS75011: Authentication method ‘X509, Multifactor, X509Device’ by which the user authenticated with the service doesn't match requested authentication method 'Password, ProtectedTransport'.

當 App ID 產生驗證要求時,驗證上下文會用來要求驗證品質和 SAML 斷言。

預設情況下,App ID 使用 urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransportexact 比較,在 authnContext,如 Understanding SAML 中所記載,而您試圖使用不同的驗證方法。 在提供的範例中,使用 X509, Multifactor 身份驗證方法。

要解決這個問題,您可以在 SAML authnContext 更新 classcomparison 值的驗證上下文設定。 若要更新上下文參數以符合您的使用情況,您可以使用 API

另外,您也可以在 SAML 組態中設定一個空白的 authnContext,如以下範例所示。

  "authnContext": { }