Документация
ОС Аврора 5.1.5

Автоматическая смена ключа безопасности проекта

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

  • сгенерировать новую пару, состоящую из открытого и закрытого ключа;
  • установить публичный ключ для аккаунта своего проекта;
  • обновить конфигурацию своего сервера приложений для использования нового ключа при получении авторизационного токена.

Для генерации пары ключей необходимо выполнить запрос ниже:

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"
}

На заключительном этапе необходимо обновить конфигурацию сервера приложений (и всех узлов кластера при наличии) для использования нового ключа при получении авторизационного токена.

При этом полученные ранее на основании старого ключа токены могут быть использованы до истечения срока их действия.

Мы используем cookies для персонализации сайта и его более удобного использования. Вы можете запретить cookies в настройках браузера.

Пожалуйста ознакомьтесь с политикой использования cookies.