Для подписания сообщения необходимо предварительно выпустить сертификат в УЦ Альфа-Банка используя сервис "Электронная подпись". Если вы уже выпускали сертификат - повторно выпускать не нужно.
Подписать JSON
Тело запроса сформировать алгоритмом RS256 в виде компактной сериализации в соответствии с JSON Web Signature и подписать тело запроса закрытым ключом сертификата, выпущенного в сервисе "Электронная подпись".
Формат JWS
BASE64URL(UTF8(JWS Protected Header)) || '.' || BASE64URL(JWS Payload) || '.' || BASE64URL(JWS Signature)
Структура тела запроса
- •Заголовок (Header)
- •
"kid": "серийный номер сертификата"
- •
"typ": "JWT"
- •
"alg": "RS256"
- •JSON-документ (Payload)
- •Подпись запроса (Signature)
Пример JWS
eyJhbGciOiJSUzI1NiIsImtpZCI6IjYxMDAwMzYzY2NiNzU5Y2I0NDg2MDc4NjVkMDAwMTAwMDM2M2NjIn0.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWUsImlhdCI6MTY1Nzg4MjY4OSwiZXhwIjoxNjU3ODg2Mjg5fQ.ApKNzZ9kLMtBY3LzReSHQ7_AyDnzocGo9GTQFRmxTiRS7Lj7a55Kr4ziwZAmmwloF1063JJMOaU0lS947q6_hSct9pxzPdZ9tTmpIDGnQL-ks0oB7zz9vUSUd3G00UZXSYnuhI9BBRXvmmTaue5Y2j5zVZofLdO2dqPWCnsQULyLn_vYf8PeABhnAQ29z1Bq42uxfRFTM35cF40Tp4VBSqXDI1vxfleLusQlOZM-5Sk7O3Vy4Sf-UB03RrRGSBerZjdoMRh7dgEyoYAXS6c4MejCm2vmXKqSd7pu2V2TxOM9UTchkCS16DL-RIJtnfMjznmznU5SoMCpncvs6gRNeQ
Для тестовой проверки можно использовать https://token.dev/.
Добавить заголовок Content-Type = "application/jose"
и отправить запрос. Далее Банк проверяет подпись. Если подпись валидна - запрос обрабатывается, если не валидна - Банк определяет запрос как неподлинный и возвращает ошибку.
Проверить подпись
Используйте открытый ключ сертификата для проверки подписи.
Проверьте подпись в соответствии с данными, указанными в Заголовке (Header). В поле kid
заголовка JWS будет записан серийный номер сертификата Банка.
{
"debitTurnover": {
"amount": 0,
"currencyName": "RUR"
}
}