Как составить 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>
Другие вопросы по тегам