【问题标题】:WSO2 IS 4.6.0: Composition of Signed SAML Authentication RequestWSO2 IS 4.6.0:签名 SAML 身份验证请求的组成
【发布时间】:2014-02-18 20:40:26
【问题描述】:

有人知道创建签名 SAML 身份验证请求的正确步骤顺序吗?

我尝试了以下步骤,但不幸的是 WSO2IS 抛出异常

  1. 生成 SAMLRequest 值
  2. 在 Base64 中编码 SAMLRequest 值
  3. 对 SAMLRequest 值进行 URL 编码
  4. 对 SigAlg 值进行 URL 编码:http://www.w3.org/2000/09/xmldsig#rsa-sha1
  5. 使用
  6. 提供算法签名 (SHA1withRSA)

SAMLRequest=值&SigAlg=值

  1. 对生成的签名进行 URL 编码

提前致谢

异常消息:

ERROR {org.opensaml.xml.security.SigningUtil} - 期间出错 签名验证 java.security.SignatureException:签名长度不正确:得到 252 但预期为 256 在 sun.security.rsa.RSASignature.engineVerify(未知来源) 在 java.security.Signature$Delegate.engineVerify(未知来源) 在 java.security.Signature.verify(未知来源) 在 org.opensaml.xml.security.SigningUtil.verify(SigningUtil.java:247) 在 org.opensaml.xml.security.SigningUtil.verify(SigningUtil.java:215) 在 org.opensaml.xml.security.SigningUtil.verifyWithURI(SigningUtil.java:184) 在 org.opensaml.xml.signature.impl.ExplicitKeySignatureTrustEngine.validate(ExplicitKeySignatureTrustEngine.java:156) 在 org.wso2.carbon.identity.sso.saml.validators.SAML2HTTPRedirectDeflateSignatureValidator.validateSignature(SAML2HTTPRedirectDeflateSignatureValidator.java:78) 在 org.wso2.carbon.identity.sso.saml.util.SAMLSSOUtil.validateDeflateSignature(SAMLSSOUtil.java:625) 在 org.wso2.carbon.identity.sso.saml.util.SAMLSSOUtil.validateAuthnRequestSignature(SAMLSSOUtil.java:578) 在 org.wso2.carbon.identity.sso.saml.processors.SPInitSSOAuthnRequestProcessor.process(SPInitSSOAuthnRequestProcessor.java:108) 在 org.wso2.carbon.identity.sso.saml.SAMLSSOService.authenticate(SAMLSSOService.java:192) 在 org.wso2.carbon.identity.sso.saml.servlet.SAMLSSOProviderServlet.handleRequestFromLoginPage(SAMLSSOProviderServlet.java:415) 在 org.wso2.carbon.identity.sso.saml.servlet.SAMLSSOProviderServlet.handleRequest(SAMLSSOProviderServlet.java:127) 在 org.wso2.carbon.identity.sso.saml.servlet.SAMLSSOProviderServlet.doPost(SAMLSSOProviderServlet.java:81) 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:755) 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:848)

【问题讨论】:

    标签: request wso2 single-sign-on saml signed


    【解决方案1】:

    以下是 WSO2IS 支持的 HTTP 重定向绑定规范中的方法。因此,您所做的事情是不正确的。我猜你错过了压缩部分。

    1. 使用 openSAML 构建 SAML 请求
    2. 使用 DEFLATE 压缩压缩 SAML 请求
    3. Base64 编码用于压缩数据
    4. 对 Base64 编码的数据进行 URL 编码。
    5. 如果有 RelayState,它必须是 URL 编码的

    如果 SAML 请求使用 XML 签名进行签名。然后我们还需要对消息的 URL 编码形式进行签名,如下所示。

    6.签名算法标识符必须包含在 URL 编码中

    7.Signature 是用下面的字符串构造的(这里的顺序很重要)

    SAMLRequest=value&RelayState=value&SigAlg=value

    8.Signature 值必须使用 base64 编码并删除任何空格,并包含在名为 Signature 的查询字符串参数中

    如果您通过this 示例SP 实现,您可以看到它是如何完成的。有一个名为SAML2SSOManager 的类和方法buildRequest。你可以通过它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-07-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多