Sign inSign up

mobile1d/test-mno

By mobile1d

•Updated almost 3 years ago

Test Mobile Connect API Mobile Network Operator

Image
0

7.7K

mobile1d/test-mno repository overview

⁠Тестовый Mobile Network Operator

Приложение представляет собой тестового мобильного оператора, автоматически подтверждающего согласие пользователя на авторизацию и передачу персональных данных. Поддерживаются режимы DI и SI Notify. Здесь и далее по тексту клиент и сервис провайдер имеют одно и то же значение. Поддерживается как шифрованная передача ПДН, так и в обычном JSON формате. Приложение работает по протоколам HTTP и HTTPS. Для HTTPS используется самоподписной сертификат, поэтому на Сервис Провайдере необходимо отключать проверку подписи SSL, либо работать по HTTP протоколу. Приложение распространяется в виде архива: https://mobileid.mts.ru/tools/test-mno.zip⁠

с бинарными (исполняемыми) под ОС:

  • Linux x64
  • Windows x64
  • MacOS X x64

а также в виде docker образа на https://hub.docker.com/r/mobile1d/test-mno⁠, получить который можно выполнив:

docker pull mobile1d/test-mno

Настройка осуществляется путём изменения Environment.

⁠Настройка, 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. Доступные значения:

    • standart - стандартный режим mobileID. Автоматическое подтверждение заданным аутентификатором. Для авторизации в SI режиме с помощью SMS_OTP необходима отправка запроса верификации с параметрами из поля send на адрес из поля smsotp_endpoint в SMS-OTP нотификации.
    • megafon - аналогичен standart. При SI авторизации по SMS-OTP, изменены параметры SMS-OTP нотификации, а также сверяемые значения при вызове verify. Сервис ведёт себя так, как если бы передаваемый ему MSISDN 70000000002, принадлежал оператору Megafon.
    • pure-megafon - режим работы мегафон, служит для внутреннего тестирования, при SI авторизации изменён формат si-authorize ответа.
  • ERROR_MODE - режим негативных сценариев. По умолчанию отключен - в зачении "disabled". Также допустимо значение "enabled". В нём, в зависимости от режима происходит имитация несогласия пользователя, отмены им авторизации, либо иной ошибки при обработке обращения. Возвращает ошибки:

    • SI: { "error": "server_error", "error_description": "internal server error" } При MOBILEID_MODE=standart, также может возвращать { "error": "access_denied", "error_description": "the client canceled the authentication" }
    • DI: { "error": "server_error", "error_description": "internal server error" }. { "error": "access_denied", "error_description": "the client canceled the authentication" }, { "error": "access_denied", "error_description": "the client does not agree to pass personal data" }
  • 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
    • json

    По умолчанию: 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
    • jwe
    • nested_jwt

По умолчанию: json.

  • CONTENT_ENCRYPTION_ALGORITHM - алгоритм шифрования, доступные назначения:

    • A128GCM
    • A192GCM
    • A256GCM
    • A128CBC-HS256
    • A192CBC-HS384
    • A256CBC-HS512

    По умолчанию: A128GCM

    Примечание: Recipient key management algorithm, задаётся автоматически в зависимости от поля alg публичного ключа сервис провайдера. Если alg не указан или не поддерживается, будет использован: RSA-OAEP-256

  • CONTENT_SIGNING_ALGORITHM - алгоритм подписания, доступные значения:

    • ES256
    • ES384
    • ES512
    • PS256
    • PS384
    • PS512
    • RS384
    • RS512

    По умолчанию: 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
    • USSD_OK
    • SMS_OTP

    По умолчанию: 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 образа.

Запуск осуществляется обычным образом и может выглядеть сл. образом:

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.

⁠Точки входа, Endpoints
  • /health (GET)
  • /oidc/authorize (GET)
  • /oidc/token (POST)
  • /oidc/premiuminfo (GET) (POST), рекомендуется GET
  • /oidc/si-authorize (POST)
  • /oidc/jwks (GET)
  • /.well-known/openid-configuration (GET)
⁠Описание si-authorize

Сервер принимает входящий запрос, валидирует его на наличие необходимых полей, парсит Request Object, используя публичный ключ клиента, полученного по CLIENT_JWKS_URL_AUTH, и, если всё валидно, создаёт отложенное уведомление, Notification. По прошествию заданного времени, сервер отправляет Notification на распарсеном в Request Object Claims - notification_uri

⁠Формирование ответов premiumInfo с персональными данными

Данные формируются на основании запрошенных 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 файлы необходим перезапуск приложения, поскольку данные кешируются в оперативной памяти в момент старта приложения, для обеспечения максимальной производительности.

⁠Шифрование и подписание premiumInfo

Данные шифруются при USERINFO_DATA_FORMAT=jwe, либо USERINFO_DATA_FORMAT=nested_jwt, и только, если в scope присутствует одно из следующих значений:

  • "mc_kyc"
  • любое из доступных, начинающихся с "mc_identity_", отличных от "mc_identity_phonenumber"

При USERINFO_DATA_FORMAT=nested_jwt, данные также предварительно подписываются. Для шифрования используется первый ключ с use: "enc", для подписания первый ключ с use: "sig" из адреса CLIENT_JWKS_URL_USERINFO. При этом запрошенные ключи кэшируются в оперативной памяти на время CLIENT_PUBLIC_ENC_KEY_CACHE_TTL_SECONDS, и для последующих запросов используются данные из кеша. Это необходимо для обеспечения максимальной производительности.

⁠Формирование ответов KYCMatch с проверкой персональных данных

Данные формируются на основании запрошенных claim'ов. Запрошенные claim'ы сравниваются с данными которые находятся во всех scope из json файлов:

./data/premiuminfo/*

После внесения изменений в json файлы необходим перезапуск приложения, поскольку данные кешируются в оперативной памяти в момент старта приложения, для обеспечения максимальной производительности.

⁠Шифрование и подписание KYCMatch

Данные шифруются при при 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, для мониторинга происходящих внутри сервиса процессов.

Tag summary

Content type

Image

Digest

sha256:0a95dfdb2…

Size

11.7 MB

Last updated

almost 3 years ago

docker pull mobile1d/test-mno