当前位置: 首页 > 知识库问答 >
问题:

WSO2是4.6.0:已签名SAML身份验证请求的组合

史旺
2023-03-14

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

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

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

SAMLRequest=值

提前谢谢

异常消息:

错误{org.opensaml.xml.security.SigningUtil}-签名验证期间的错误。SignatureException:签名长度不正确:在sun.security.rsa.RSASignature中得到252,但预期为256。engineVerify(未知源代码)位于java.security.Signature$Delegate。engineVerify(未知源代码)位于java.security.Signature。在org.opensaml.xml.security.SigningUtil.verify(signngutil.java:247)处验证(未知源代码)在org.opensaml.xml.security.signnguil.verific(signinguil.java:215)处验证,在org.opensaml.xml.security.Signinguill.verifyWithURI(signangutil.java:184)处,在org.opensaml.xml.signature.impl.ExplicitKeySignature.ExpliciTKeySignatureTrustingine.validate处验证(ExplicitKey SignatureRuntine.java:156)org.wso2.carbon.identity.sso.saml.validators.SAML2HTTPRedirectDeflateSignatureValidator.validateSignature(saml2HttpRedirectdeFlateSignatureAvalidator.java:78)位于org.ws02.carbone.identility.sso.saml.util.SAMLSSOUtil.ValidatedFlateSignator(SAMLSSOUtil.java:625)位于org.wso2.carbon.identity.ssol.util.SAMLSSOUtil.samlssoutel.eauthnrequestSignatureorg.wso2.carbon.identity.sso.saml.processors.SPInitSSOAuthnRequestProcessor.process(SpinitsOauthnRequestProcessOR.java:108)位于org.wso2.carbon.identity.sso.saml.SAMLSSOService.authenticate(SAMLSSOService.java:192),org.wso2.Carbo.Identience.sso.saml.servlet.SAMLSSOProviderServlet.HandlerRequestFromLoginPage(SAMLSSOProviderServlet.java:415)位于org.wso2.carbon.identity.sso.saml.servlet.SAMLSSOProviderServlet.handleRequest(SAMLSSOProviderServlet.java:127)位于org.ws02.carbone.idention.sso.saml.servlet.samlsoProviderServelet.doPost(SAMLSSOProviderServlet.java:81)位于javax.servlet.http.HttpServlet.;service(httpServelet.java:755)位于javanx.servlet.http.httservlet.服务(HttpServlet.java:848)

共有1个答案

李俊雅
2023-03-14

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

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

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

6.Signature算法标识符必须包含为URL编码

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

SAMLRequest=值

8.签名值必须使用base64编码进行编码,删除任何空白,并作为名为< code>Signature的查询字符串参数包含在内

如果您浏览一下这个SP实现示例,就可以看到它是如何实现的。有一个名为< code>SAML2SSOManager的类和< code>buildRequest方法。你可以通过它。

 类似资料:
  • 我已经浏览了类似的问题并阅读了几篇关于SAML 2.0的文章,但我仍然无法理解SAML Auth Request。 我已经实施了几个基于SAML的SSO解决方案,其中我的公司是IdP(身份提供商)。我们一直通过SAML响应将用户从我们的网站发送给第三方: 用户登录我们的网站 用户单击我们网站上的特殊链接 我们准备SAML响应XML 我们用私钥对其进行电子签名 将其作为HTML格式的隐藏字段以及“R

  • 版本:WSO2身份服务器5.4.1 出于审计的目的,我们编写了UserOperationEventListener,以便通过实现doPostAuthenticate()来挂钩到身份验证过程。 这通过表单捕获API身份验证和web登录。不幸的是,当is作为另一个第三方SAML IDP的SAML SP运行时,侦听器没有被调用。 问:有没有一个监听器在SAML认证成功时被调用?或者有没有其他方法可以连接

  • 我应该在Jupyter中实现SAML身份验证(Okta)。我试过搜索,但什么也没找到。也许有人知道答案。谢谢你的帮助。

  • 我正在学习使用ADFS进行基于SAML的声明验证。与其将用户带到IDP的登录页面,然后请求用户输入她的凭据,不如在SP中获取用户的凭据并将其传递给IDP以在那里进行验证,然后使用SAML令牌返回SP。 这纯粹是实验性的,我想尝试一下,以避免用户在IdP登录页面中输入凭据,而不是在SP中获取她的凭据从IdP验证。 谢谢

  • 我有一个客户端服务器场景。 我有厚客户端和瘦客户端(浏览器),它们与我的服务器进行通信。 我的胖客户端使用X-509系统证书进行客户端证书身份验证,并与服务器通信 此外,此证书用于生成签名URL(带过期时间),以便我的瘦客户机与服务器通信,用于完整性和授权目的。在这种情况下,我也有一个基于令牌的方法用于身份验证。 现在,我想使用客户端凭据或基于身份验证代码将身份验证机制移动到基于OAuth的流。