在.NET 4.0中签署SamlAssertion

时间:2013-10-23 20:08:29

标签: c# .net-4.0 saml-2.0

我在.Net 4.0中有一个SamlAssertion http://msdn.microsoft.com/en-us/library/system.identitymodel.tokens.samlassertion.aspx

我需要对其进行签名,然后对其进行加密,并将其发布给业务合作伙伴。我们是身份提供者并开始沟通。

我在网上找到的符号方法是希望将XmlDocument作为参数发送。如何将SamlAssertion转换/转换为可签名的xml文档?或者有没有办法签署断言而无需转换/转换?

2 个答案:

答案 0 :(得分:3)

以下是关于可互操作XML签名的三部分教程:

http://www.wiktorzychla.com/2012/12/interoperable-xml-digital-signatures-c.html http://www.wiktorzychla.com/2012/12/interoperable-xml-digital-signatures-c_20.html http://www.wiktorzychla.com/2012/12/interoperable-xml-digital-signatures-c_4247.html

注意签名密钥信息附加到签名文档的部分。这使您的收件人可以轻松验证签名是否有效以及用于签名邮件的密钥是否可接受。收件人必须验证两者!特别是,有效签名是不够的,因为任何证书都可能用于生成有效签名。另一方面,您不希望使用任何密钥生成签名,而是使用与IdP和依赖方都知道的证书相对应的密钥。

答案 1 :(得分:1)

您必须分两步执行此操作:首先将Assertion序列化为XML,然后使用.NET框架中的SignedXml类对其进行签名。

请注意您的签名和加密内容:您是否只想签名/加密断言或整个响应消息?

您可能从我编写的SAML2库中获得了一些灵感,我在其中有一些方法可以在单元测试中签署虚拟消息:https://github.com/KentorIT/authservices/blob/master/Kentor.AuthServices.Tests/SignedXmlHelper.cs