Найти и получить в одной операции в KMIP (протокол взаимодействия управления ключами) - PullRequest
0 голосов
/ 19 ноября 2018

Кто-нибудь использовал операцию 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 Ответ

0 голосов
/ 24 ноября 2018

Ваш сервер KMIP должен реализовывать механизм заполнителя идентификатора.Это временная переменная уникального идентификатора для кэширования идентификатора между элементами пакета в запросе (см. Раздел Операции клиент-сервер в спецификации).

Для каждой операции вы можете увидеть, какэтот идентификатор заполнителя должен быть использован или сохранен.Выдержка из операции Locate :

Сервер возвращает список уникальных идентификаторов найденных объектов, которые затем МОГУТ быть получены с помощью операции Get.[...].Если один уникальный идентификатор возвращается клиенту, то сервер ДОЛЖЕН скопировать уникальный идентификатор, возвращаемый этой операцией, в переменную идентификатора-заполнителя.Если операция Locate соответствует более чем одному объекту, а значение Maximum Items пропущено в запросе или для него задано значение, превышающее один, то сервер ДОЛЖЕН очистить идентификатор Placeholder, вызывая любые последующие операции, связанные с Locate.и которые не указывают уникальный идентификатор в явном виде для сбоя.

В операции Get таблица полезной нагрузки Get Request указывает, что уникальный идентификатор не требуется, и описывает, что:

Если не указано, то значение идентификатора заполнителя используется сервером в качестве уникального идентификатора.

Затем для операции Locate , еслиНайдите результаты с одним уникальным идентификатором, сервер должен кэшировать значение в заполнителе идентификатора (независимо от следующей операции), иначе он должен очистить заполнитель идентификатора.

Наконец, для операции Get , если в запросе не указан уникальный идентификатор, сервер должен выполнить операцию сИдентификатор заполнителя.Если заполнитель идентификатора пуст, операция должна завершиться с таким результатом, как «Неверное поле» (я не уверен в причине этого результата, но для меня это имеет смысл).

...