Что нужно знать о JWKS?

В работе с сервисом Мобильный ID могут потребоваться пары криптографических ключей в формате JSON (JWK):

  1. Для подписания (ключ с “use”:”sig”) — при формировании значения параметра request в запросе на /si-authorize и NestedJWT в запросе на /kyc-match-split.
  2. Для шифрования (ключ с “use”:”enc”) — при формировании и обработке body запросов и ответов на /kyc-match-split и /premiuminfo.

Сервис-провайдеру необходимо сгенерировать ключи, опубликовать их на своём ресурсе и вписать адрес хранения публичных ключей в анкету на подключение к сервису. Ключи должны храниться в виде JSON Web Key Set (JWKS) — JSON-объекта с параметром “keys”, в который включён массив с набором публичных ключей (JWK).

Пример JWKS

{
  "keys": [
    {
      "kty": "RSA",
      "e": "AQAB",
      "use": "sig",
      "kid": "zno_K2w2J28A0CGPciEDDfMcCgd2JK5x779hAgmmUgc",
      "alg": "RS256",
      "n": "k_cWneEqkYOcMgec5H2yhwWV5QNX6C-MQa_BIUnlgUVa8-2BPtYVCMJdOrbagHi_CtEeCOPMmBWVZ-C-I_2KotHmwH-I5YRIIp7Pd9nK0w5NLWph9hzlZGu42AGicOJ4sCHNp0vM4KyK9gbgoy_8BGcJqTyiI6w3CB3xVFpbptnnuG1cYB3eh9804BaGfYlMKLlKSJp_nANz6ys52FQw24B1Er6Tzb5qww1IEW40U71ZdKE9BKsQrQbQpWsk725f3MdMn1SqDA3m6VsxmMtmeGvnFwQ-6yw3n5HVUCNf1L8XD36H-rIbmj2GzDmPOihka1kqUnp1lWXaGHX1mDY0Lw"
    },
    {
      "kty": "RSA",
      "e": "AQAB",
      "use": "enc",
      "kid": "g88rEbg2SBNTB2OmGN7WJz5xfmyL69VqsM693iJMXdE",
      "alg": "RSA-OAEP",
      "n": "uXahz_z1m-SctY738bvUQFOmV2cDSJxIJk3SnoOShZxRbZgHgLK-o5-aqRUS1ahjfl6uRxKQAabWeKJmv1k95eVuXYzJX5EzDtcHn0nXd02uflnNyOcl-v-NcfJwvBwteAn8TDNPMTo45qx4h6NZtq8OCXSfmMZbEcIYv9wT_dD0KL043BqOLPc5Ak9MO2SxqP3DDJQEPM8LQS6nXJI0BAFG1m5DbsPGpTK0M5fYRGnlK1YyPig5oDG8MKdK4Ia6JV8SuQZNQ6UCuHCvG90VrZmN39cOh0DUJdaMIvggGrB-T7pPvGsIb2QjIkSrhQUP1-3etG5yOOAxNFYZ92p8cQ"
    }
  ]
}

Ссылки на документацию:

Генерация JWK

Чтобы сгенерировать ключи, можно использовать сервис mkjwk.org.

Подписание

Для выполнения операции подписания необходимо сгенерировать JWK со следующими параметрами:

  • Key Type = RSA
  • Key Size = 2048
  • Key Use = Signature
  • Algorithm = RS256
  • Key id = уникальное значение

Шифрование

Для выполнения операции шифрования необходимо сгенерировать JWK со следующими параметрами:

  • Key Type = RSA
  • Key Size = 2048
  • Key Use = Encryption
  • Algorithm = RSA-OAEP-256
  • Key id = уникальное значение