在XML文件中签名元素时出现“id”属性的情况

问题描述 投票:1回答:2

在创建对xml-dsig标准之后的数字签名元素的引用时,“id”属性的情况是否重要?

我已经看到名为“ID”,“Id”和“id”的属性,并且一些软件包难以找到不同形式的正确元素/节点。

此外,遵循各种规范和模式,预期有不同的id属性。

确保该属性必须命名为“id”,但是是指定的情况还是只有建议?

xml signature xml-signature
2个回答
1
投票

(注意:您必须知道我不是xml-dsig专家,因此我只关注XML,DTD和XML Schema。)

XML区分大小写,因此案例很重要,必须与您使用的DTD或Schema中的相同。

当然,如果应用程序使用不同的模式和不同的情况,则存在兼容性问题。

我查看了http://www.w3.org/TR/xmldsig-core/上的官方W3C规范,Schema和DTD似乎指定了“Id”。这是您使用的规格吗?

此外,知道相应的DTD类型是“ID”并且存在称为“id”的XQuery函数可能会令人困惑。


1
投票

基本问题是双重的。首先,如您所知,XML区分大小写。

其次,XML不“定义”ID属性的名称。与HTML不同,HTML表示元素可能具有'id'属性,而XML本身则不具有'id'属性。存在xs:ID类型的概念,但默认情况下不提供属性的名称(例如,IDIdidmyIdentifier)。

有关参考,请参阅W3C How should the problem of identifying ID semantics ... be addressed...?

因此,一些解析软件假设id,一些假设任何idIDId,一些假设没有。

更具体地说,我通常会在SAML签名中看到ID的用法。常用的命令xmlsec1不识别要使用的名称,因此您必须这样做。例如:

xmlsec1 --decrypt --privkey-pem /foo/key.pem --id-attr:ID EncryptedKey my.xml

告诉xmlsec1将ID节点(仅)上的命名EncryptedKey属性声明为已知的xs:ID属性。它似乎是附加的:你可以做多个:

xmlsec1 --decrypt ... --id-attr:Id EncryptedKey --id-attr:ID EncryptedKey --id-attr:id EncryptedKey 

将在EncryptedKey节点上使用任何。

(您可以将foobar声明为xs:ID属性,它可以正常工作,因此如果您的源XML具有以下内容:

<node foobar="1234"/>
<otherNode URI="#1234"/>

使用:

xmlsec1 --id-attr:foobar node ...
© www.soinside.com 2019 - 2024. All rights reserved.