Автоматическая смена ключа безопасности проекта
В случае, если при выполнении запроса на получение информации о проекте будет замечено, что срок действия ключа истекает, необходимо заблаговременно выполнить следующие действия:
- сгенерировать новую пару, состоящую из открытого и закрытого ключа;
- установить публичный ключ для аккаунта своего проекта;
- обновить конфигурацию своего сервера приложений для использования нового ключа при получении авторизационного токена.
Для генерации пары ключей необходимо выполнить запрос ниже:
POST {api_url}/keyPairs
Заголовок Content-Type
должен иметь значение: application/json
.
Параметры тела запроса приведены в таблице. Все параметры обязательные.
Параметр | Тип | Описание |
---|---|---|
alg | String | Алгоритм для подписи токена. Должно быть указано значение RS256. |
kid | String | Идентификатор ключа. Строка длиной 10 символов, содержащая цифры и буквы латинского алфавита в нижнем и верхнем регистрах. |
use | String | Целевое назначение алгоритма шифрования. Должно быть указано значение sig. |
Заголовок Authorization
должен иметь значение Bearer access_token
, полученный
в запросе авторизации.
Коды ошибок аналогичны тем, что приведены в таблице из раздела об отправке.
Для случая успеха параметры ответа приведены в таблице. Все параметры обязательные.
Параметр | Тип | Описание |
---|---|---|
private | OBJ private | Объект с информацией о закрытом ключе |
public | OBJ public | Объект с информацией об открытом ключе |
Параметры объекта private
приведены в таблице.
Все параметры обязательные.
Параметр | Тип | Описание |
---|---|---|
jwk | OBJ privateJWK | Объект с описанием закрытого ключа |
pem | String | Строка с закрытым ключом в формате .pem |
Параметры объекта privateJWK
приведены в таблице.
Детальная информация доступна в RFC 7518.
Все параметры обязательные.
Параметр | Тип | Описание |
---|---|---|
alg | String | Криптографический алгоритм, в котором предполагается использование ключа |
d | String | Экспонента RSA, участвующая в формировании закрытого ключа. Для подключения к Сервису уведомлений не используется |
e | String | Публичная экспонента RSA. Для подключения к Сервису уведомлений не используется |
kid | String | Идентификатор ключа. Строка длиной 10 символов, содержащая цифры и буквы латинского алфавита в нижнем и верхнем регистрах |
kty | String | Семейство алгоритмов шифрования, используемое при генерации ключа. Значение будет равно RSA |
n | String | Модуль RSA. Для подключения к Сервису уведомлений не используется |
p | String | Первый простой множитель. Для подключения к Сервису уведомлений не используется |
q | String | Второй простой множитель. Для подключения к Сервису уведомлений не используется |
use | String | Целевое назначение алгоритма шифрования. Должно быть указано значение sig |
Параметры объекта public
приведены в таблице.
Все параметры обязательные.
Параметр | Тип | Описание |
---|---|---|
jwk | OBJ publicJWK | Объект с описанием открытого ключа |
Параметры объекта publicJWK
приведены в таблице.
Детали доступны в RFC 7518.
Все параметры обязательные.
Параметр | Тип | Описание |
---|---|---|
alg | String | Криптографический алгоритм, в котором предполагается использование ключа |
e | String | Публичная экспонента RSA. Для подключения к Сервису уведомлений не используется |
kid | String | Идентификатор ключа |
kty | String | Семейство алгоритмов шифрования, используемое при генерации ключа. Значение будет равно RSA |
n | String | Модуль RSA. Для подключения к Сервису уведомлений не используется |
use | String | Целевое назначение алгоритма шифрования. Должно быть указано значение sig |
Пример ответа представлен ниже:
{
"private":{
"jwk":{
"alg":"RS256",
"d":"HD ..... PAHPkp_V6byeaf-G0", // сокращено для отображения
"e":"AQAB",
"kid":"private:tt9jjwRJxx",
"kty":"RSA",
"n":"39a ....... LRs9J_ROgPUk", // сокращено для отображения
"p":"8BU ....... fZW-RclDaPw", // сокращено для отображения
"q":"7q3 ....... PdGvp62dw", // сокращено для отображения
"use":"sig"
},
"pem":"-----BEGIN RSA PRIVATE KEY-----\nMIIJQ ...... jKqthG\n-----END RSA PRIVATE KEY-----\n" // сокращено для отображения
},
"public":{
"jwk":{
"alg":"RS256",
"e":"AQAB",
"kid":"public:tt9jjwRJxx",
"kty":"RSA",
"n":"39a ...... BLRs9J_RogPUk", // сокращено для отображения
"use":"sig"
},
"pem":""
}
}
После генерации пары ключей необходимо применить публичный ключ для аккаунта своего проекта. Для этого необходимо сделать следующий запрос:
PUT {api_url}/projects/{project_id}/serviceAccounts/{client_id}/publicKeys
Параметры project_id
и client_id
подставляются
из конфигурационного файла проекта, полученного от владельца
Сервиса уведомлений.
Заголовок Content-Type
должен иметь значение application/json
.
Параметры тела запроса приведены в таблице. Все параметры обязательные.
Параметр | Тип | Описание |
---|---|---|
keys | Array of OBJ publicJWK | Массив с данными об открытом ключе, описанным в предыдущей таблице |
В тело запроса в массив keys
должен быть добавлен объект public.jwk
из ответа на запрос
по генерации ключей.
Пример тела запроса:
{
"keys":[
{
"alg":"RS256",
"e":"AQAB",
"kid":"public:tt9jjwRJxx",
"kty":"RSA",
"n":"39a ......... Rs9J_RogPUk", // сокращено для отображения
"use":"sig"
}
]
}
Заголовок Authorization
должен иметь значение Bearer access_token
, полученный
в запросе авторизации.
Коды ошибок аналогичны тем, что приведены в таблице из раздела об отправке.
В случае успеха пример ответа может выглядеть так:
{
"audience":[
"https://ocs-int.ompcloud.ru/auth/public",
"https://ocs-int.ompcloud.ru/push/public"
],
"clientId":"kushnarev_test_cla7thirvkjfc4j9g1e0",
"clientName":"kushnarev-test",
"scope":"openid offline message:update project:read keyPairs:create serviceAccount:update"
}
На заключительном этапе необходимо обновить конфигурацию сервера приложений (и всех узлов кластера при наличии) для использования нового ключа при получении авторизационного токена.
При этом полученные ранее на основании старого ключа токены могут быть использованы до истечения срока их действия.