2017-02-23 81 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