Протокол¶
Оглавление¶
Схема классов¶
keyapis/kms/v1/keyapis_kms_key_v1.proto¶
Сервис для генерации и хранения приватных и публичных ключей, в данном случае необходимых для подписи токена, находится в DMZ зоне, непосредственно не участвует в сценариях Партнёра
KmsService¶
Сервис KMS
| Название метода | Описание | Тип запроса | Тип ответа |
|---|---|---|---|
| PostKmsKeyGenerate | Метод генерации пары ключей. Генерирует публичный и приватный ключи. Приватный ключ шифруется алгоритмом AES-GCM и сохранятеся в колонке kms.key_infos.encrypted_private_key. Формат хранения приватного ключа - строковое представление JSON: состоит из переменных: - Nonce: Number used once - представляет собой уникальный набор битов, используется один раз при шифровании блока данных в режиме GCM. - EncryptedString: зашифрованный приватный ключ в формате DER. - Tag: Message Authentication Code, используется для проверки целостности и подлинности данных после их расшифровки. Публичный ключ сохранятеся в колонке kms.key_infos.public_key в формате DER и передаётся в сервис JWKS методом PostKey. Логика работы метода: https://confluence.rt.ru/pages/viewpage.action?pageId=664695357. Метод доступен для: admin, manager, service | keyapis.kms.v1.PostKmsKeyGenerateRequest | keyapis.kms.v1.PostKmsKeyGenerateResponse |
| GetKmsKeyList | Метод получения ключей. Возвращает три последних ключа отсортированных по created_at DESC. Используется в административном интерфейсе, для отображения даты выпуска последней пары ключей. Сценарий использвания: https://confluence.rt.ru/pages/viewpage.action?pageId=682907591. Метод доступен для: admin, manager, service | keyapis.kms.v1.GetKmsKeyListRequest | keyapis.kms.v1.GetKmsKeyListResponse stream |
GetKmsKeyListRequest¶
Запрос на получение ключей
GetKmsKeyListResponse¶
Ответ на запрос на получение ключей
| Поле | Описание | Тип | Признак |
|---|---|---|---|
| data | Ключ. В ключе должен отсутсвовать encrypted_private_key | optional keyapis.kms.v1.KeyInfo |
KeyInfo¶
Пара ключей.
Описание модели¶
| Поле | Описание | Тип | Признак |
|---|---|---|---|
| id | Идентификатор. # Тип: Guid | string | REQUIRED |
| public_key | Публичный ключ. # Диапазон: 0..800 | string | OUTPUT_ONLY |
| encrypted_private_key | Приватный ключ в зашифрованном виде. # Диапазон: 0..4000 | string | OUTPUT_ONLY |
| created_at | Дата и время создания ключа | google.protobuf.Timestamp | OUTPUT_ONLY |
| expired_at | Дата и время истечения жизни ключа | google.protobuf.Timestamp | OUTPUT_ONLY |
KeyInfo.GeneratingError¶
Ошибка генерации
| Поле | Описание | Тип | Признак |
|---|---|---|---|
| transaction | Ошибка генерации ключа в сервисе KMS | optional keyapis.kms.v1.KeyInfo.GeneratingError.TransactionError | |
| publishing | Ошибка сохранения публичного ключа в сервисе JWKS | optional keyapis.kms.v1.KeyInfo.GeneratingError.PublishingKeyError |
KeyInfo.GeneratingError.PublishingKeyError¶
Ошибка сохранения публичного ключа в сервисе JWKS. Причины: - Отсутсвует связанность с сервисом JWKS
KeyInfo.GeneratingError.TransactionError¶
Ошибка генерации ключа в сервисе KMS. Причины: - Отсутсвует связанность с базой данных
PostKmsKeyGenerateRequest¶
Запрос на генерацию пары ключей
PostKmsKeyGenerateResponse¶
Ответ на запрос на генерацию пары ключей
| Поле | Описание | Тип | Признак |
|---|---|---|---|
| data | Идентификатор. # Тип: Guid | optional string | |
| error | Ошибка | optional keyapis.kms.v1.PostKmsKeyGenerateResponse.Error |
PostKmsKeyGenerateResponse.Error¶
Ошибка
| Поле | Описание | Тип | Признак |
|---|---|---|---|
| generating | Ошибка генерации ключей в сервисе KMS | optional keyapis.kms.v1.KeyInfo.GeneratingError |
Скалярные типы значений¶
| .proto Type | Примечание | Python | Go | Ruby | C# | C++ | Java | PHP |
|---|---|---|---|---|---|---|---|---|
| double | float | float64 | Float | double | double | double | float | |
| float | float | float32 | Float | float | float | float | float | |
| int32 | Uses variable-length encoding. Inefficient for encoding negative numbers – if your field is likely to have negative values, use sint32 instead. | int | int32 | Bignum or Fixnum (as required) | int | int32 | int | integer |
| int64 | Uses variable-length encoding. Inefficient for encoding negative numbers – if your field is likely to have negative values, use sint64 instead. | int/long | int64 | Bignum | long | int64 | long | integer/string |
| uint32 | Uses variable-length encoding. | int/long | uint32 | Bignum or Fixnum (as required) | uint | uint32 | int | integer |
| uint64 | Uses variable-length encoding. | int/long | uint64 | Bignum or Fixnum (as required) | ulong | uint64 | long | integer/string |
| sint32 | Uses variable-length encoding. Signed int value. These more efficiently encode negative numbers than regular int32s. | int | int32 | Bignum or Fixnum (as required) | int | int32 | int | integer |
| sint64 | Uses variable-length encoding. Signed int value. These more efficiently encode negative numbers than regular int64s. | int/long | int64 | Bignum | long | int64 | long | integer/string |
| fixed32 | Always four bytes. More efficient than uint32 if values are often greater than 2^28. | int | uint32 | Bignum or Fixnum (as required) | uint | uint32 | int | integer |
| fixed64 | Always eight bytes. More efficient than uint64 if values are often greater than 2^56. | int/long | uint64 | Bignum | ulong | uint64 | long | integer/string |
| sfixed32 | Always four bytes. | int | int32 | Bignum or Fixnum (as required) | int | int32 | int | integer |
| sfixed64 | Always eight bytes. | int/long | int64 | Bignum | long | int64 | long | integer/string |
| bool | boolean | bool | TrueClass/FalseClass | bool | bool | boolean | boolean | |
| string | A string must always contain UTF-8 encoded or 7-bit ASCII text. | str/unicode | string | String (UTF-8) | string | string | String | string |
| bytes | May contain any arbitrary sequence of bytes. | str | []byte | String (ASCII-8BIT) | ByteString | string | ByteString | string |