Авторизация в RuStore получаем JWE токен используя терминал и OpenSSL

В этой статье будет рассмотрен метод авторизации с использованием 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.p8

3. Преобразование полученного приватного ключа из формата PKCS#8 в обычный PEM формат:

openssl rsa -in pkey.p8 -out rsa.pem

2. Подписание и отправка запроса

Используя приватный ключ, скрипт генерирует 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.

Ссылки:

Метод получения токена авторизации:

Начать дискуссию