簡體   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