IBM Cloud Docs
为什么我的 SAML 认证请求失败?

为什么我的 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。

为什么我接收到有关我的名称标识的错误?

发送认证请求时,收到有关 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 元数据 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) 签名,但身份提供者必须配置为需要相应的配置。

要解决此问题,请执行以下操作:

  • 通过使用signRequest设置 SAML IdP APItrue 参数设置为 ,验证 IBM Cloud 是否配置为对认证请求签名。 您可以通过查看请求 URL 来检查身份验证请求是否已签名。 签名会作为查询参数包含在 URL 中。 例如, https://idp.example.org/SAML2/SSO/Redirect?SAMLRequest=request&SigAlg=value&Signature=value&RelayState=token

  • 验证身份提供者是否配置为使用正确的证书。 要获取签名证书,请检查从 IBM Cloud 面板下载的 IBM Cloud 元数据 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 在 authnContext 中使用 urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransportexact 进行比较,正如《 了解 SAML 》一书中所记录的那样,而您正试图使用不同的身份验证方法。 在所提供的示例中,使用的是 X509, Multifactor 身份验证方法。

要解决这个问题,可以更新 SAML authnContextclasscomparison 值的身份验证上下文设置。 要更新上下文参数以适应您的使用情况,可以使用 API

或者,也可以在 SAML 配置中设置一个空白的 authnContext,如下例所示。

  "authnContext": { }