如何在SP启动的SSO上诊断SAML IDP(Azure B2C自定义策略)返回的错误“无效签名”

时间:2019-07-23 10:34:41

标签: saml saml-2.0 azure-ad-b2c

我已遵循有关在Azure B2C中设置自定义策略以使其充当SAML IDP的指南。我已经将该元数据提供给我的SP应用程序(CompleteFTP),并尝试执行SP初始化的SSO。

AuthNRequest由SP应用程序制定并签名。然后通过客户端浏览器将其重定向到IDP。

在任何用户流发生之前,IDP都会生成并返回响应。

    <samlp:Status><samlp:StatusCode Value="urn:oasis:names:tc:SAML:2.0:status:Requester"/>
        <samlp:StatusMessage>Invalid signature.</samlp:StatusMessage>
        <IsPolicySpecificError>false</IsPolicySpecificError>
    </samlp:Status>

因此,这似乎很明显,urn:oasis:names:tc:SAML:2.0:status:Requester是IDP责备SP并声明其在其请求中发送了Invalid signature.

问题是我真的找不到从这里去的地方!

到目前为止我尝试过的事情:

  • 获取Application Insights以获得Journey Recorder跟踪(见下文)=同样的错误,没有太多的新细节
  • 使用其他SP发出另一个请求=相同错误
  • 使用此SP和其他IDP =到目前为止尚无定论,但仍在追求
  • 将此SP与Azure AD SAML'Enterprise Apps'一起使用=第一次工作,我认为是因为IDP不在乎签名?
  • 使用具有OpenID flow / app的同一Azure B2C租户=可以正常运行
  • 重新生成Azure B2C SAML安装程序使用的各种签名和加密证书=相同错误
  • 将SP元数据复制/粘贴到Azure B2C自定义策略文件中,而不是通过URL引用它=相同错误
  • 粘贴后,弄乱SP元数据以颠倒签名证书的顺序(有3个看起来像一个链)或一次仅包含1个=相同错误

目前,这似乎表明Azure B2C SAML IDP流所使用的签名验证存在问题,但是那怎么可能呢?其他人有这个工作!

行程记录器摘录:

  {
    "Kind": "Predicate",
    "Content": "Web.TPEngine.StateMachineHandlers.InitiatingMessageValidationHandler"
  },
  {
    "Kind": "HandlerResult",
    "Content": {
      "Result": false,
      "RecorderRecord": {
        "Values": [
          {
            "Key": "Validation",
            "Value": {
              "Values": [
                {
                  "Key": "SubmittedBy",
                  "Value": "Application"
                },
                {
                  "Key": "ProtocolProviderType",
                  "Value": "SamlProtocolProvider"
                },
                {
                  "Key": "Exception",
                  "Value": {
                    "Kind": "Handled",
                    "HResult": "80131500",
                    "Message": "Invalid signature.",
                    "Data": {
                      "IsPolicySpecificError": false
                    }
                  }
                }
              ]
            }
          }
        ]
      }

0 个答案:

没有答案