Как составить SPML v2 "изменить" запрос на удаление атрибута объекта
Я недавно присоединился к организации, которая поддерживает свои Active Directory с помощью запросов SPMLv2 SOAP к серверу активных ролей.
Я пытаюсь сделать что-то якобы простое: удалить атрибут phoneNumber из объекта. Честно говоря, я никогда раньше не слышал о SPML, поэтому потратил некоторое время, пытаясь расшифровать спецификацию, доступную в списке открытых стандартов OASIS.
Я понял, как это сделать, если значение известно. Например, полезная нагрузка ниже удалит атрибут phoneNumber, если он соответствует значению "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 any', но у меня возникают проблемы с пониманием спецификации.
Есть идеи?
Изменить: чтобы добавить к путанице, я вижу, что мы используем пространство имен DSMLv2 для модификации. Я просто извлек это из примера в документации службы Active Roles SPML, поэтому не знаю, как и почему он работает. Спецификация SPML упоминает DSML, но, насколько я могу судить, не дает никакого контекста вокруг его использования. На самом деле это может быть реализация для конкретного поставщика.
1 ответ
Разобраться с решением / обойти эту проблему.
Чтобы удалить атрибут, не зная его текущего значения, вы можете просто включить операцию замены, чтобы сначала установить произвольное значение, и включить его в тот же запрос на изменение, что и операция удаления.
<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>