繁体   English   中英

WSO2 IS 4.6.0:签名的SAML身份验证请求的组成

[英]WSO2 IS 4.6.0: Composition of Signed SAML Authentication Request

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

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

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

SAMLRequest =值&SigAlg =值

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

提前致谢

异常消息:

错误{org.opensaml.xml.security.SigningUtil}-签名验证java.security.SignatureException期间出错:签名长度不正确:得到252,但在java.sun.security.rsa.RSASignature.engineVerify(Unknown Source)处期望为256 org.opensaml.xml的java.security.Signature.verify(未知源)的.security.Signature $ Delegate.engineVerify(未知源) org.opensaml.xml上的security.SigningUtil.verify(SigningUtil.java:215)org.opensaml.xml.signature.impl.ExplicitKeySignatureTrustEngine.validate(ExplicitKeySignatureTrustEngine.java:的安全.SigningUtil.verifyWithURI(SigningUtil.java:184) 156),网址为org.wso2.carbon.identity.sso.saml.util.SAMLSSOUtil.validateDeflate.validateDef.org(sAML2HTTPRedirectDeflateSignatureValidator.validateSignature(SAML2HTTPRedirectDeflateSignatureValidator.java:78)。 625),网址为org.wso2.carbon.identity.sso.saml.util.SAMLSS org.wso2.carbon.identity.sso.saml.processors.SPInitSSOAuthnRequestProcessor.process(SPInitSSOAuthnRequestProcessor.java:108)的OUtil.validateAuthnRequestSignature(SAMLSSOUtil.java:578)在org.wso2.carbon.identity.sso.saml.SAMLSSOService。在org.wso2.carbon.identity.sso.saml.servlet.SAMLSSOProviderServlet处在org.wso2.carbon.identity.sso.saml.servlet.SAMLSSOProviderServlet.handleRequestFromLoginPage(SAMLSSOProviderServlet.java:415)处进行authenticate(SAMLSSOService.java:192)。 org.wso2.carbon.identity.sso.saml.servlet.SAMLSSOProviderServlet.doPost(SAMLSSOProviderServlet.java:81)上的handleRequest(SAMLSSOProviderServlet.java:127)在javax.servlet.http.HttpServlet.service(HttpServlet.java:755)上在javax.servlet.http.HttpServlet.service(HttpServlet.java:848)

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

  1. 使用openSAML生成SAML请求
  2. 使用DEFLATE压缩来压缩SAML请求
  3. Base64编码完成了压缩数据
  4. 对Base64编码的数据执行URL编码。
  5. 如果存在RelayState,则必须使用URL编码

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

6,签名算法标识符必须包含URL编码

7,签名是为后面的字符串构造的(这里的顺序很重要)

SAMLRequest =值&RelayState =值&SigAlg =值

8,签名值必须使用base64编码进行编码,并删除所有空格,并将其作为名为Signature的查询字符串参数包含在内

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM