В этой статье будет рассмотрен метод авторизации с использованием RSA подписи и запроса к REST API сервиса https://public-api.rustore.ru.1. ПодготовкаПеред тем как начать, убедитесь, что у вас установлены необходимые инструменты командной строки: curl, openssl, jq, а также что ваша система может выполнять bash скрипты.Скрипт начинается со следующих шагов:1. Генерация метки времени в формате ISO 8601 с точностью до миллисекунд и временной зоны:TIMESTAMP=$(date +"%FT%T.%3N%:z")2. Преобразовываем PKEY_P8_64 (строка MIIEvgI...) в pkey.p8 (бинарный):echo "$PKEY_P8_64" | base64 -d > pkey.p83. Преобразование полученного приватного ключа из формата PKCS#8 в обычный PEM формат:openssl rsa -in pkey.p8 -out rsa.pem2. Подписание и отправка запросаИспользуя приватный ключ, скрипт генерирует RSA подпись для строки, составленной из ID компании и метки времени:SIGNATURE=$(echo -n "$COMPANY_ID$TIMESTAMP" | openssl sha512 -sign rsa.pem | base64 -w 0; rm pkey.p8 rsa.pem)После криптографического подписания, скрипт формирует JSON объект с ID компании, меткой времени и подписью:AUTH_JSON="{\"companyId\":\"$COMPANY_ID\",\"timestamp\":\"$TIMESTAMP\",\"signature\":\"$SIGNATURE\"}"Этот JSON объект затем отправляется в REST API через curl запрос для авторизации:AUTH_RESPONSE_JSON=$(curl --json "$AUTH_JSON" https://public-api.rustore.ru/public/auth/)Ожидается, что в ответе сервиса будет JSON объект содержащий, среди прочего, JWE (JSON Web Encryption) токен, который извлекается следующим образом:JWE_TOKEN=$(echo "$AUTH_RESPONSE_JSON" | jq -r 'select(.code=="OK") | .body.jwe')Полный код:TIMESTAMP=$(date +"%FT%T.%3N%:z") echo "$PKEY_P8_64" | base64 -d > pkey.p8 openssl rsa -in pkey.p8 -out rsa.pem SIGNATURE=$(echo -n "$COMPANY_ID$TIMESTAMP" | openssl sha512 -sign rsa.pem | base64 -w 0; rm pkey.p8 rsa.pem) AUTH_JSON="{\"companyId\":\"$COMPANY_ID\",\"timestamp\":\"$TIMESTAMP\",\"signature\":\"$SIGNATURE\"}" AUTH_RESPONSE_JSON=$(curl --json "$AUTH_JSON" https://public-api.rustore.ru/public/auth/) JWE_TOKEN=$(echo "$AUTH_RESPONSE_JSON" | jq -r 'select(.code=="OK") | .body.jwe')После получения токена JWE (JSON Web Encryption) открылась возможность продолжать изучение документации и применять данный токен JWE в запросах. В документации приведены примеры использования токена JWE для запросов, такие как загрузка и публикация приложений через API RuStore.www.rustore.ruЗагрузка и публикация приложений с помощью API RuStore | Документация RuStoreСсылки:Метод получения токена авторизации:https://www.rustore.ru/help/work-with-RuStore-API/api-authorization-token