Идентификация с помощью Moneta Id

Сервис Moneta ID предназначен для выполнения упрощенной или полной идентификации клиентов через внешних провайдеров, например сотовых операторов (МТС, Beeline, Тинькофф).

1. Схема взаимодействия

Процесс взаимодействия между партнером и Moneta Id определяется следующими шагами:

  1. Приложение партнера формирует и подписывает токен, в котором сохранена информация о Пользователе МОНЕТА.РУ (юните), для которого нужно провести идентификацию, тип идентификации и другая информация.
  2. Приложение партнера перенаправляет браузера Пользователя ЭСП МОНЕТА.РУ на специальный адрес, передав токен безопасности.
  3. MonetaId запрашивает у Пользователя ЭСП МОНЕТА.РУ информацию, необходимую для проведения идентификации.
  4. MonetaId проводит процедуру идентификации.
  5. MonetaId уведомляет приложение партнера о ходе идентификации.
  6. MonetaId возвращает Пользователя ЭСП МОНЕТА.РУ в приложение партнера.
Схема взаимодействия Схема взаимодействия

2.Стенды

Тестовый контур

Для отладки взаимодействия и тестирования в настоящее время доступны следующие окружения:

APIТегОписание
https://mid.demo.moneta.ru/DemoДемо тестовый стенд

Стартовый URL для перенаправления клиентов соответственно:

https://<API-root>/identification?subscriberId=<subscriberId>&unitId=<unitId>&phone=<phone>&cnonce=<cnonce>&signature=<signature>

Тестовый контур

Данный режим предполагает подключение и работе через www.demo.moneta.ru. Для отладки прохождения упрощенной идентификации в демонстрационном режиме, можно использовать любые персональные данные клиента. Чтобы протестировать изменение статуса необходимо задать задать одну из “якорных” фамилий:

  1. “Петров” - УПРИД будет пройден успешно.
  2. “Сидоров” - УПРИД будет всегда отдавать статус “В процессе”.
  3. Смирнов" - УПРИД всегда будет завершаться неудачно.

3. Регистрация партнера

Партнеру необходимо предоставить следующие данные на адрес mp@payanyway.ru:

Обязательная информация:

  1. Полное и короткое наименование проекта.
  2. URL для отправки уведомлений о статусе прохождения идентификации (statusURL).
  3. URL для отправки уведомлений о проблемах в работе виджета (notifyURL).

Со стороны Moneta Id будет предоставлена следующая информация:

apiSecret - Код проверки целостности данных. Код, обеспечивающий идентификацию отправителя и возможность проверки целостности данных, известный только системе Moneta Id и партнеру. Код будет направлен на адрес электронной почты от Личного кабинета партнера, указанный в Договоре.

subscribeURL - Специальная ссылка для установления доверия.

4.Установление доверия

Для формирования сервисом Moneta SBP/FPS операций перевода (вывода) необходимо пройти процедуру установления доверия.

Для проведения идентификации Пользователей ЭСП МОНЕТА.РУ с помощью сервиса MonetaId необходимо пройти процедуру установления доверия с сервисом.

Партнеру необходимо:

  1. Войти в Личный кабинет партнера с Пользователями ЭСП МОНЕТА.РУ на www.moneta.ru (или www.demo.moneta.ru для демо контура).
  2. Перейти по ссылке, которую предоставил сервис MonetaId.
  3. В появившемся диалоге ознакомиться с информации о том, какие разрешения партнер предоставит сервису Moneta SBP/FPS.
  4. Подтвердить предоставление разрешений.

Перечень действий с юнитами/профилями Пользователей ЭСП МОНЕТА.РУ, которые партнер может предоставить сервису MonetaId:

  • GetProfileInfo
  • FindProfileDocumentFiles
  • FindProfileDocuments
  • EditProfileDocument
  • EditProfile
  • ApprovePhoneSendConfirmation
  • ApprovePhoneApplyCode
  • SimplifiedIdentification

5.Аутентификация

Общая информация

Для обновления информации в профиле Пользователя ЭСП МОНЕТА.РУ сервисом MonetaId партнер должен сформировать специальный одноразовый токен.

Формирование токена и подписи

Предварительные условия:

  1. Необходимо пройти процедуру регистрации партнера и получит ApiSecret.
  2. Необходимо установить доверительные отношения с сервисом MonetaId.

Для реализации алгоритма формирования единовременного токена использованы следующие стандарты:

  1. RFC 3986 Uniform Resource Identifier (URI): Generic Syntax.
  2. RFC 2104 HMAC: Keyed-Hashing for Message Authentication.

Токен состоит из 2-х частей:

  1. Информационное сообщение, содержащее ключевую информацию о партнере и Пользователе ЭСП МОНЕТА.РУ, служебную информацию.
  2. Подпись/Хеш от информационного сообщения из п.1., и использование заранее полученного общего секрета - ApiSecret.

Формирование информационного сообщения

Информационное сообщение состоит из набора ключ-значение, которые закодированы в соответствии с правилами URL-кодирования строк по RFC 3986. Пример:

Ниже приведен набор обязательных параметров, которые необходимо указать при формировании информационного сообщения (ключи должны следовать в отсортированном порядке, как в таблице ниже):

КлючОписаниеТипПример
subscriberIdИдентификатор партнера в системе MonetaIdString
unitIdИдентификатор пользователя в НКО “Монета”, для которого необходимо провести идентификацию.Число11111
phoneСотовый телефон. Сотовый телефон в личном кабинете пользователя должен быть “подтвержден”.Число9001234567
cnonceОдноразовый код, выбранный случайным или псевдослучайным образом, использующееся для невозможности повторного использования одного и того же токенаЧисло10201010
unitIdИдентификатор профиля/юнита в НКО “Монета”, для которого необходимо провести идентификацию.Число100500
successURLURL страницы партнера, куда должен попасть пользователь, если идентификация проведена успешноURL
returnURLURL страницы партнера, куда должен вернуться пользователь при закрытии виджетаURL
failURLURL страницы партнера, куда должен попасть покупатель, если идентификация не была проведенаURL
inprogressURLURL страницы партнера, куда должен попасть пользователь после успешного запроса на идентификацию, до получения ответа о статусе запроса на идентификациюURL
signatureКод для идентификации отправителя и проверки целостности данных.

Пример итогового информационного сообщения:

subscriberId=testSubscriber&unitId=1000&phone=9001234567&cnonce=ygfhkJIBiT3kxjq5P74Tc00Ry6nkC5kK&signature=cf1299778ba5b9310bd2cd42747a43fb79ce72aad16a22704e633900c6dbc9e9a4b61afe53c3fec27c600ef5625a0423b75cc4d96ecaf2890b1dff8db36d4d03

Формирование подписи

После того, как информационное сообщение сформировано, необходимо вычислить подпись/хеш с использованием общего секрета - ApiSecret.

Кодирование ключа производится путем конкатенации в одну строку значений параметров запроса и кода проверки целостности данных, кодированием по алгоритму HMAC-SHA512 и представлением массива байт в виде строки шестнадцатеричных чисел:

Алгоритм формирования:

  1. Вычислить HMAC-SHA512 хеш используя пару (информационное сообщение, секрет).
  2. Полученный массив байт перевести в строку в шестнадцатеричном представлении.
// message - значениия параметров запроса
// secret  - секрет/apiSecret

message = subscriberId + unitId + phone + cnonce + successURL + returnURL + failURL + inprogressURL
signatureBytes  = hmac_sha512(message, secret)
signatureString = bytesToHex(signatureBytes)

После того, как подпись в виде hex-строки сформирована, необходимо добавить ее к параметрам запроса с ключом signature:

subscriberId=testSubscriber&unitId=1000&phone=9001234567&cnonce=ygfhkJIBiT3kxjq5P74Tc00Ry6nkC5kK&signature=cf1299778ba5b9310bd2cd42747a43fb79ce72aad16a22704e633900c6dbc9e9a4b61afe53c3fec27c600ef5625a0423b75cc4d96ecaf2890b1dff8db36d4d03

Финальным шагом необходимо полученные параметры, использовать при перенаправлении на виджет идентификации.

// БРАУЗЕР КЛИЕНТА
// делаем редирект в браузере клиента на указанный адрес

// DEV окружение
https://mid.demo.moneta.ru/identification?{параметры запроса}

// PROD окружение
https://mid.moneta.ru/identification?{параметры запроса}

6.Уведомление о статусе идентификации

Результат мобильной идентификации или упрощенной идентификации будет передан на указанный партнером при регистрации URL в виде GET запроса с query параметрами.

Список передаваемых партнеру параметров:

КлючТипОписаниеПример
typestringтип уведомления: IDENTIFICATIONtype=IDENTIFICATION
unitIdnumberидентификатор юзера в монете, который проходил проверку.unitId=10050
statusstringстатус прохождения УПРИД: SUCCEEDEDstatus=SUCCEEDED
messagestring10201010
signaturestringподпись всех переданных параметров.signature=1d9…db6

Проверка signature

Подпись всех переданных параметров через механизм аналогичный механизму формирования подписи от партнера.

Таким образом партнер может убедиться в достоверности вызова, сделав проверку:

hmac_sha512(params, secret) == signature

Где params - это значениия параметров запроса.

Код ответа на запрос с уведомлением о статусе идентификации

Для того, чтобы сообщить Moneta Id, что партнер получил информацию о статусе идентификации, скрипт партнера (statusURL) должен дать ответ с http-кодом 200.

Попытки отправки уведомления будут повторены:

  • Если Moneta Id не смогла получить ответот обработчика.
  • Если сервер партнера был недоступен.