我对XML文件进行数字签名,但需要签名标记包含名称空间前缀"ds".我研究了很多谷歌,发现了许多相同的问题,但没有令人满意的答案.
我试图手动将"ds"放在文件中,但签名变得无效.标记"SignatureValue"对标记"SignedInfo"进行签名,因此签名变为无效.
有人可以告诉我如何生成标签"SignatureValue"的值,这样我可以在添加前缀"ds"后替换签名吗?
我试图将引用添加到我的安全标题,并遇到一个相当普遍的错误:
格式错误的参考元素
我尝试了以下类似的结果:
ID
的元素作为的URI
所述的Reference
目的.XmlElement
对象到Reference
通过LoadXml()
方法.我正在XmlElement
使用此StackOverflow帖子GetIdElement
上的重载找到检索引用.当我传入一个空字符串作为时URI
,ComputeSignature()
方法SignedXml
按预期工作.但是,我需要添加最多3个对安全标头的引用.
更新#1
感谢这篇博文,我能够从中创建简化版本,我相信导致我的问题的是使用Namespace
属性和前缀.
更新#2
看起来好像元素Id
属性上的命名空间声明<Timestamp>
导致发生此错误.
更新#3
我认为我有这个工作.请参阅下面的回答帖子.
工作示例:
请注意,Id XAttribute
定义的命名空间不起作用; 而Id XAttribute
没有定义的命名空间确实有效.
private void CreateSecurityAndTimestampXML(string fileName)
{
TimestampID = "TS-E" + GUID.NewGuid();
DateTime SecurityTimestampUTC = DateTime.UtcNow;
XDocument xdoc = new XDocument(
new XElement(wsse + "Security",
new XAttribute(XNamespace.Xmlns + "wsse", wsse.NamespaceName), …
Run Code Online (Sandbox Code Playgroud)