如何编写 SPML v2 'modify' 请求删除对象属性

How to compose SPML v2 'modify' request to delete object attribute

我需要通过对 Active Roles Server.

的 SPMLv2 SOAP 请求来维护 Active Directory 服务

我正在尝试做一些表面上很简单的事情:从对象中删除 telephoneNumber 属性。我以前从未听说过 SPML,所以我花了一些时间试图了解 OASIS open standards.

列表中可用的规范

如果值为 已知,我已经想出了如何做到这一点。例如,如果 telephoneNumber 属性与值“12345”匹配,下面的有效负载将删除它,但不会删除任何其他值。

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" 
    xmlns:urn="urn:oasis:names:tc:SPML:2:0">
<soapenv:Header/>
<soapenv:Body>
    <urn:modifyRequest xmlns:spml="urn:oasis:names:tc:SPML:2:0">
        <urn:psoID ID="CN=Some User,OU=User,OU=Accounts,DC=someorganisation,DC=org"/>
            <urn:modification>
                <modification name="telephoneNumber" operation="delete" xmlns="urn:oasis:names:tc:DSML:2:0:core">
                    <value>12345</value>
                </modification>
            </urn:modification>
        </urn:modifyRequest>
    </soapenv:Body>
</soapenv:Envelope>

我想不通的是如何为未指定的值执行此操作,即在删除之前我不关心该值是什么,我只想删除它。我怀疑这与 SelectionType 有关,我只需要使用 'match anything' 选择器,但我无法理解规范。

有什么想法吗?

编辑:更让人困惑的是,我看到我们正在使用 DSMLv2 命名空间进行修改。我只是从 Active Roles SPML 服务文档的示例中提取了这个,所以我不知道 how/why 它是否有效。 SPML 规范确实提到了 DSML,但据我所知没有给出任何关于它的用法的上下文。它实际上可能是特定于供应商的实现。

解决了这个问题solution/work-around。

要在不知道其当前值的情况下删除属性,您可以简单地包含一个 'replace' 操作以首先设置一些任意值并将其包含在与 'delete' 操作相同的修改请求中。

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" 
    xmlns:urn="urn:oasis:names:tc:SPML:2:0">
<soapenv:Header/>
<soapenv:Body>
    <urn:modifyRequest xmlns:spml="urn:oasis:names:tc:SPML:2:0">
        <urn:psoID ID="CN=Some User,OU=User,OU=Accounts,DC=someorganisation,DC=org"/>
            <urn:modification>
                <modification name="telephoneNumber" operation="replace" xmlns="urn:oasis:names:tc:DSML:2:0:core">
                    <value>deleteMe</value>
                </modification>
                <modification name="telephoneNumber" operation="delete" xmlns="urn:oasis:names:tc:DSML:2:0:core">
                    <value>deleteMe</value>
                </modification>
            </urn:modification>
        </urn:modifyRequest>
    </soapenv:Body>
</soapenv:Envelope>