为什么我的 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 不需要加密响应。 要配置加密,请使用 encryptResponse
API** 将 ** 参数设置为 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:PasswordProtectedTransport
和 exact
进行比较,正如《 了解 SAML 》一书中所记录的那样,而您正试图使用不同的身份验证方法。 在所提供的示例中,使用的是
X509, Multifactor
身份验证方法。
要解决这个问题,可以更新 SAML authnContext
中 class
和 comparison
值的身份验证上下文设置。 要更新上下文参数以适应您的使用情况,可以使用 API。
或者,也可以在 SAML 配置中设置一个空白的 authnContext
,如下例所示。
"authnContext": { }