Test Mobile Connect API Mobile Network Operator
7.7K
Приложение представляет собой тестового мобильного оператора, автоматически подтверждающего согласие пользователя на авторизацию и передачу персональных данных. Поддерживаются режимы DI и SI Notify. Здесь и далее по тексту клиент и сервис провайдер имеют одно и то же значение. Поддерживается как шифрованная передача ПДН, так и в обычном JSON формате. Приложение работает по протоколам HTTP и HTTPS. Для HTTPS используется самоподписной сертификат, поэтому на Сервис Провайдере необходимо отключать проверку подписи SSL, либо работать по HTTP протоколу. Приложение распространяется в виде архива: https://mobileid.mts.ru/tools/test-mno.zip
с бинарными (исполняемыми) под ОС:
а также в виде docker образа на https://hub.docker.com/r/mobile1d/test-mno, получить который можно выполнив:
docker pull mobile1d/test-mno
Настройка осуществляется путём изменения Environment.
VERSION - версия приложения, используется для контроля CI/CD
HTTP_INT_PORT - HTTP порт сервиса. По умолчанию: 8013
HTTPS_INT_PORT - HTTPS порт сервиса. По умолчанию: 44313
PROMETHEUS_INT_PORT - HTTP порт метрик Prometheus. По умолчанию: 9093
LOG_LEVEL - уровень логирования, доступны значения: debug, info, warn, error. По умолчанию: info
MOBILEID_MODE - режим работы mobileID. По умолчанию: standart. Доступные значения:
ERROR_MODE - режим негативных сценариев. По умолчанию отключен - в зачении "disabled". Также допустимо значение "enabled". В нём, в зависимости от режима происходит имитация несогласия пользователя, отмены им авторизации, либо иной ошибки при обработке обращения. Возвращает ошибки:
PCR - тестовый идентификатор абонента использующийся в ID Token. По умолчанию: 74fdcb18-a637-4daf-bf74-61321c14e2ba
SI_NOTIFY_DELAY_SECONDS - задержка (в сек.), между ответом на запрос SI authorize и отправкой Notification клиенту. По умолчанию: 20 сек.
SI_NOTIFY_CONTENT_TYPE - Формат передачи Notification, доступные значения:
По умолчанию: x-www-form-urlencoded
SI_AUTH_TTL_SECONDS - время жизни AuthReqID для SI авторизации. По умолчанию: 120 сек.
DI_AUTH_TTL_SECONDS - время жизни access code для DI авторизации. По умолчанию: 120 сек.
TOKEN_TTL_SECONDS - время жизни Access Token, для запроса PremiumInfo а также KYCmatch для DI и SI (notify). По умолчанию: 900 сек.
USERINFO_DATA_FORMAT - формат ответа при обращении к KYC/Premiuminfo. Доступны значения:
По умолчанию: json.
CONTENT_ENCRYPTION_ALGORITHM - алгоритм шифрования, доступные назначения:
По умолчанию: A128GCM
Примечание: Recipient key management algorithm, задаётся автоматически в зависимости от поля alg публичного ключа сервис провайдера. Если alg не указан или не поддерживается, будет использован: RSA-OAEP-256
CONTENT_SIGNING_ALGORITHM - алгоритм подписания, доступные значения:
По умолчанию: RS256
PUBLIC_KEY - публичный ключ, используется в endpoint jwks. Прописан по умолчанию, но не отображён из-за соображений безопасности. Прописан по умолчанию, но не отображён из-за соображений безопасности.
PRIVATE_KEY - приватный ключ, используется для подписи IDToken и исходящих ответов на API endpoint notification. Прописан по умолчанию, но не отображён из-за соображений безопасности.
SMS_OTP_CODE - SMS OTP код, для подтверждения SMS-OTP авторизации в SI режиме. По умолчанию: 1234
SMS_OTP_NOTIFICATION_DELAY_SECONDS - задержка (в сек.), между ответом на запрос SI authorize и отправкой SMS OTP Notification клиенту. По умолчанию: 2 сек.
AUTHENTICATION_METHOD - Аутентификатор, который будет использоваться для прохождения аутентификации. Возвращается в поле AMR IDToken. Возможные значения:
По умолчанию: SIM_OK
CLIENT_ID - Идентификатор клиента. По умолчанию: "testClient"
CLIENT_SECRET - Секрет клиента. По умолчанию: "testSecret"
CLIENT_VERIFY_SSL - Проверять подпись SSL сертификата клиента при https запросах. По умолчанию: true
CLIENT_NOTIFICATION_URL - Notification URL адрес. Используется при валидации SI запроса авторизации Request Object Сlaims notification_uri. По умолчанию: "https://demo.mobileid.mts.ru/notification"
CLIENT_SMS_OTP_NOTIFICATION_URL - SMS-OTP Notification URL адрес. Адрес для отправки дополнительной нотификации о необходимости перехода на SMS-OTP подтверждение. По умолчанию: "https://demo.mobileid.mts.ru/sms-otp-notification"
CLIENT_REDIRECT_URL - Redirect URL адрес. Используется при валидации DI запроса авторизации. По умолчанию: "https://demo.mobileid.mts.ru/callback"
CLIENT_JWKS_URL_AUTH - JWKS URL адрес, где опубликован ключ для проверки подписи Request Object. По умолчанию: https://demo.mobileid.mts.ru/jwks
CLIENT_JWKS_URL_USERINFO - JWKS URL адрес, где опубликован(ы) ключ(и) для шифрования ответа с персональными данными на адресах /premiuminfo и /kyc, а также для проверки подписи запроса на /kyc. Для шифрования используется первый ключ с use: "enc", для проверки подписи первый ключ с use: "sig". По умолчанию: https://demo.mobileid.mts.ru/jwks
CLIENT_PUBLIC_ENC_KEY_CACHE_TTL_SECONDS - Время жизни кеша публичного ключа используемого для шифрования. По умолчанию: 600 сек.
CLIENT_PUBLIC_SIG_KEY_CACHE_TTL_SECONDS - Время жизни кеша публичного ключа используемого для подписи. По умолчанию: 600 сек.
CLIENT_ENC_MSISDN_PUBLIC_KEY - Публичный RSA ключ для шифрования MSISDN.
CLIENT_ENC_MSISDN_PRIVATE_KEY - Приватный RSA ключ для расшифровки ENCR_MSISDN.
Запуск осуществляется из корневой! директории.
./bin/test-mno._используемая_ос_
Перед запуском необходимо настроить Environment.
Для ОС Linux вариант запуска может выглядеть сл. образом:
CLIENT_REDIRECT_URL=http://sp.mobcon.localhost/callback CLIENT_NOTIFICATION_URL=http://sp.mobcon.localhost/notification CLIENT_JWKS_URL_AUTH=http://sp.mobcon.localhost/jwks CLIENT_JWKS_URL_USERINFO=http://sp.mobcon.localhost/jwks ./bin/test-mno.linux64
Для ОС Windows вариант запуска может выглядеть сл. образом:
set CLIENT_REDIRECT_URL=http://sp.mobcon.localhost/callback
set CLIENT_NOTIFICATION_URL=http://sp.mobcon.localhost/notification
set CLIENT_JWKS_URL_AUTH=http://sp.mobcon.localhost/jwks
set CLIENT_JWKS_URL_USERINFO=http://sp.mobcon.localhost/jwks
bin\test-mno.windows64.exe
Запуск осуществляется обычным образом и может выглядеть сл. образом:
docker run --network=host --env CLIENT_REDIRECT_URL=http://sp.mobcon.localhost/callback --env CLIENT_NOTIFICATION_URL=http://sp.mobcon.localhost/notification --env CLIENT_JWKS_URL_AUTH=http://sp.mobcon.localhost/jwks --env CLIENT_JWKS_URL_USERINFO=http://sp.mobcon.localhost/jwks mobile1d/test-mno
Для удобства можно использовать docker-compose.
Сервер принимает входящий запрос, валидирует его на наличие необходимых полей, парсит Request Object, используя публичный ключ клиента, полученного по CLIENT_JWKS_URL_AUTH, и, если всё валидно, создаёт отложенное уведомление, Notification. По прошествию заданного времени, сервер отправляет Notification на распарсеном в Request Object Claims - notification_uri
Данные формируются на основании запрошенных scope. Сами данные находятся в json файлах:
./data/premiuminfo/запрошенный_scope
Название файла совпадает с запрошенным scope. При запросе нескольких scope данные будут агрегированы из нескольких файлов.
Например при запросе scope="openid mc_identity_phonenumber mc_identity_full" будут взяты данные из файлов:
./data/premiuminfo/mc_identity_phonenumber.json
./data/premiuminfo/mc_identity_full.json
Если в файлах присутствуют пересекающиеся claim'ы, то результирующий claim будет выбран случайным образом. После внесения изменений в json файлы необходим перезапуск приложения, поскольку данные кешируются в оперативной памяти в момент старта приложения, для обеспечения максимальной производительности.
Данные шифруются при USERINFO_DATA_FORMAT=jwe, либо USERINFO_DATA_FORMAT=nested_jwt, и только, если в scope присутствует одно из следующих значений:
При USERINFO_DATA_FORMAT=nested_jwt, данные также предварительно подписываются. Для шифрования используется первый ключ с use: "enc", для подписания первый ключ с use: "sig" из адреса CLIENT_JWKS_URL_USERINFO. При этом запрошенные ключи кэшируются в оперативной памяти на время CLIENT_PUBLIC_ENC_KEY_CACHE_TTL_SECONDS, и для последующих запросов используются данные из кеша. Это необходимо для обеспечения максимальной производительности.
Данные формируются на основании запрошенных claim'ов. Запрошенные claim'ы сравниваются с данными которые находятся во всех scope из json файлов:
./data/premiuminfo/*
После внесения изменений в json файлы необходим перезапуск приложения, поскольку данные кешируются в оперативной памяти в момент старта приложения, для обеспечения максимальной производительности.
Данные шифруются при при USERINFO_DATA_FORMAT=jwe, либо USERINFO_DATA_FORMAT=nested_jwt. При USERINFO_DATA_FORMAT=nested_jwt, данные также предварительно подписываются. Для шифрования используется первый ключ с use: "enc", для подписания первый ключ с use: "sig" из адреса CLIENT_JWKS_URL_USERINFO. При этом запрошенные ключи кэшируются в оперативной памяти на время CLIENT_PUBLIC_ENC_KEY_CACHE_TTL_SECONDS, и для последующих запросов используются данные из кеша. Это необходимо для обеспечения максимальной производительности.
В сервис интегрирована поддержка стандартных HTTP метрик в формате Prometheus. Метрики отражают текущий статус сервиса и могут быть обработаны Prometheus + (например) Grafana, для мониторинга происходящих внутри сервиса процессов.
Content type
Image
Digest
sha256:0a95dfdb2…
Size
11.7 MB
Last updated
almost 3 years ago
docker pull mobile1d/test-mno