Как шифровать MSISDN?
Для обеспечения возможности формирования ENCR_MSISDN сервис предоставляет специфичный для учетной записи публичный ключ.
Чтобы получить публичный ключ в формате JWK, нужно отправить запрос:
POST https://idgw.mobileid.mts.ru/oidc/jwks
Authorization: Basic {base64encoded[client_id:client_secret]}
В ответ придёт JSON-объект, представляющий собой набор JWK-ключей, перечисленных в свойстве keys. В данном случае свойство keys будет содержать только один JWK для шифрования MSISDN, например:
{
"keys": [
{
"kty": "RSA",
"e": "AQAB",
"kid": "rsa1",
"alg": "RS256",
"n": "4NSQheOOjAcWAfch93B9N1ELaDe4oJa7Ro8l4tRuTLUJs4Q0SDuT1nuAQCqvbJ",
"use": "enc"
}
]
}
Получив ключ, нужно выполнить операцию шифрования с использованием алгоритма RSA/ECB/PKCS1Padding.
Далее, полученное значение необходимо конвертировать в Base64UrlEncoded.
Пример на PHP
openssl_public_encrypt($loginHintValue, $encryptedMsisdn, $publicKey);
$params['login_hint'] = 'ENCR_MSISDN:' . base64_url_encode($encryptedMsisdn, $noPadding);
Пример ручного формирования ENCR_MSISDN
- Получить публичный ключ POST-запросом.
- Произвести конвертацию формата ключа JWK → PEM. Можно выполнить с помощью онлайн-сервиса 8gwifi.org.
- Зашифровать значение номера телефона с использованием
RSA/ECB/PKCS1Padding. Можно выполнить с помощью онлайн-сервиса 8gwifi.org. - Преобразовать полученный на выходе base64 в Base64Url (заменить неподдерживаемые символы в соответствии с rfc3548).