2017-02-23 100 views
0

如果您通過下面的鏈接,正好我必須在java中實現相同的邏輯。 https://www.samltool.com/sign_response.php如何使用Open SAML簽署SAML響應

我有一個沒有簽名的XML。在發送給服務提供商之前,我必須簽署該消息。我有私鑰和公鑰以及無符號的xml。

我是SAML的新手,有人可以幫助我提供一個代碼片段,確切地說使用公鑰和私鑰簽名消息的方法。

需要你在這方面的投入。

感謝, 阿希什

+0

你使用哪種版本OpenSAML的? – gusto2

回答

0

您創建一個簽名objecy並在

signature.setSigningCredential(credential); 
signature.setSignatureAlgorithm(SignatureConstants.ALGO_ID_SIGNATURE_RSA_SHA1); 
signature.setCanonicalizationAlgorithm(SignatureConstants.ALGO_ID_C14N_EXCL_OMIT_COMMENTS); 

設置簽名屬性,然後設置簽名對象的響應

.setSignature(signature) 

接下來馬歇爾響應對象

XMLObjectProviderRegistrySupport 
    .getMarshallerFactory() 
    .getMarshaller(response) 
    .marshall(response); 

最後您使用簽名者類中this post on my blog

1

履行簽收

Signer.signObject(signature); 

我有更多的信息,您還可以使用onelogin SAML的Java utils的從Onelogin Saml Java - 一個似乎更容易(他們有方法加載公鑰,私鑰,字符串文件等等。然後您可以使用它來簽署整個SAML響應或簽署斷言,然後回覆:

Document document = Util.loadXML(saml); //loads string to document 

//load private key and certificate 
X509Certificate cert = Util.loadCert(pubKeyBytes); 
PrivateKey privateKey = Util.loadPrivateKey(privKeyBytes); 

//sign the response 
String signedResponse = Util.addSign(document, privateKey, cert, null); 

使用這個庫,只需添加

<dependency> 
    <groupId>com.onelogin</groupId> 
    <artifactId>java-saml</artifactId> 
    <version>2.0.0</version> 
</dependency> 

依賴於你的項目的pom.xml