Найти и получить в одной операции в 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, если в запросе не указан уникальный идентификатор, сервер должен выполнить операцию с заполнителем идентификатора. Если заполнитель идентификатора пуст, операция должна завершиться с таким результатом, как "Неверное поле" (я не уверен в причине этого результата, но это имеет смысл для меня).

Другие вопросы по тегам