Найти и получить в одной операции в KMIP(протокол взаимодействия управления ключами)
Кто-нибудь использовал операцию locate и get в одном запросе kmip. Я получаю сообщение об ошибке, потому что одновременно работать сложно. Как вы можете видеть запрос kmip я отправляю на мой сервер.
<RequestMessage>
<RequestHeader>
<ProtocolVersion>
<ProtocolVersionMajor type="Integer" value="1"/>
<ProtocolVersionMinor type="Integer" value="2"/>
</ProtocolVersion>
<Authentication>
<Credential>
<CredentialType type="Enumeration" value="UsernameAndPassword"/>
<CredentialValue>
<Username type="TextString" value="vijans"/>
<Password type="TextString" value="asdf1234"/>
</CredentialValue>
</Credential>
</Authentication>
<BatchOrderOption type="Boolean" value="1"/>
<BatchCount type="Integer" value="2"/>
</RequestHeader>
<BatchItem>
<Operation type="Enumeration" value="Locate"/>
<UniqueBatchItemID type="ByteString" value="31303030303031"/>
<RequestPayload>
<Attribute>
<AttributeName type="TextString" value="Name"/>
<AttributeValue>
<NameValue type="TextString" value="new_ss_nv"/>
<NameType type="Enumeration" value="UninterpretedTextString"/>
</AttributeValue>
</Attribute>
</RequestPayload>
</BatchItem>
<BatchItem>
<Operation type="Enumeration" value="Get"/>
<UniqueBatchItemID type="ByteString" value="31303030303032"/>
<RequestPayload/>
</BatchItem>
</RequestMessage>
это недопустимо, потому что операция get не предусматривает использование уникального идентификатора. Может ли кто-нибудь помочь?
1 ответ
Ваш сервер KMIP должен реализовать механизм заполнителя идентификатора. Это временная переменная уникального идентификатора для кэширования идентификатора между элементами пакета в запросе (см. Раздел " Операции клиент-сервер " в спецификации).
Для каждой операции вы можете видеть, как этот идентификатор-заполнитель должен использоваться или сохраняться. Выписка из операции Locate:
Сервер возвращает список уникальных идентификаторов найденных объектов, которые затем МОГУТ быть получены с помощью операции Get. [...]. Если один уникальный идентификатор возвращается клиенту, сервер ДОЛЖЕН скопировать уникальный идентификатор, возвращаемый этой операцией, в переменную идентификатора-заполнителя. Если операция Locate соответствует более чем одному объекту, а значение Maximum Items опущено в запросе или для него задано значение, превышающее единицу, то сервер ДОЛЖЕН очистить идентификатор Placeholder, вызывая любые последующие операции, связанные с Locate. и которые не указывают уникальный идентификатор явно, чтобы потерпеть неудачу.
В операции Get таблица полезных данных Get Request указывает, что уникальный идентификатор не требуется, и описывает, что:
Если опущено, то значение идентификатора заполнителя используется сервером в качестве уникального идентификатора.
Затем для операции Locate, если результаты Locate приводятся с одним уникальным идентификатором, сервер должен кэшировать значение в заполнителе идентификатора (независимо от следующей операции), иначе он должен очистить заполнитель идентификатора.
Наконец, для операции Get, если в запросе не указан уникальный идентификатор, сервер должен выполнить операцию с заполнителем идентификатора. Если заполнитель идентификатора пуст, операция должна завершиться с таким результатом, как "Неверное поле" (я не уверен в причине этого результата, но это имеет смысл для меня).