Идентификация с помощью Moneta Id
Сервис Moneta ID предназначен для выполнения упрощенной или полной идентификации клиентов через внешних провайдеров, например сотовых операторов (МТС, Beeline, Тинькофф).
1. Схема взаимодействия
Процесс взаимодействия между партнером и Moneta Id определяется следующими шагами:
- Приложение партнера формирует и подписывает токен, в котором сохранена информация о Пользователе МОНЕТА.РУ (юните), для которого нужно провести идентификацию, тип идентификации и другая информация.
- Приложение партнера перенаправляет браузера Пользователя ЭСП МОНЕТА.РУ на специальный адрес, передав токен безопасности.
- MonetaId запрашивает у Пользователя ЭСП МОНЕТА.РУ информацию, необходимую для проведения идентификации.
- MonetaId проводит процедуру идентификации.
- MonetaId уведомляет приложение партнера о ходе идентификации.
- 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. Для отладки прохождения упрощенной идентификации в демонстрационном режиме, можно использовать любые персональные данные клиента. Чтобы протестировать изменение статуса необходимо задать задать одну из “якорных” фамилий:
- “Петров” - УПРИД будет пройден успешно.
- “Сидоров” - УПРИД будет всегда отдавать статус “В процессе”.
- Смирнов" - УПРИД всегда будет завершаться неудачно.
3. Регистрация партнера
Партнеру необходимо предоставить следующие данные на адрес mp@payanyway.ru:
Обязательная информация:
- Полное и короткое наименование проекта.
- URL для отправки уведомлений о статусе прохождения идентификации (statusURL).
- URL для отправки уведомлений о проблемах в работе виджета (notifyURL).
Со стороны Moneta Id будет предоставлена следующая информация:
apiSecret - Код проверки целостности данных. Код, обеспечивающий идентификацию отправителя и возможность проверки целостности данных, известный только системе Moneta Id и партнеру. Код будет направлен на адрес электронной почты от Личного кабинета партнера, указанный в Договоре.
subscribeURL - Специальная ссылка для установления доверия.
4.Установление доверия
Для формирования сервисом Moneta SBP/FPS операций перевода (вывода) необходимо пройти процедуру установления доверия.
Для проведения идентификации Пользователей ЭСП МОНЕТА.РУ с помощью сервиса MonetaId необходимо пройти процедуру установления доверия с сервисом.
Партнеру необходимо:
- Войти в Личный кабинет партнера с Пользователями ЭСП МОНЕТА.РУ на www.moneta.ru (или www.demo.moneta.ru для демо контура).
- Перейти по ссылке, которую предоставил сервис MonetaId.
- В появившемся диалоге ознакомиться с информации о том, какие разрешения партнер предоставит сервису Moneta SBP/FPS.
- Подтвердить предоставление разрешений.
Перечень действий с юнитами/профилями Пользователей ЭСП МОНЕТА.РУ, которые партнер может предоставить сервису MonetaId:
GetProfileInfo
FindProfileDocumentFiles
FindProfileDocuments
EditProfileDocument
EditProfile
ApprovePhoneSendConfirmation
ApprovePhoneApplyCode
SimplifiedIdentification
5.Аутентификация
Общая информация
Для обновления информации в профиле Пользователя ЭСП МОНЕТА.РУ сервисом MonetaId партнер должен сформировать специальный одноразовый токен.
Формирование токена и подписи
Предварительные условия:
- Необходимо пройти процедуру регистрации партнера и получит ApiSecret.
- Необходимо установить доверительные отношения с сервисом MonetaId.
Для реализации алгоритма формирования единовременного токена использованы следующие стандарты:
- RFC 3986 Uniform Resource Identifier (URI): Generic Syntax.
- RFC 2104 HMAC: Keyed-Hashing for Message Authentication.
Токен состоит из 2-х частей:
- Информационное сообщение, содержащее ключевую информацию о партнере и Пользователе ЭСП МОНЕТА.РУ, служебную информацию.
- Подпись/Хеш от информационного сообщения из п.1., и использование заранее полученного общего секрета - ApiSecret.
Формирование информационного сообщения
Информационное сообщение состоит из набора ключ-значение, которые закодированы в соответствии с правилами URL-кодирования строк по RFC 3986. Пример:
Ниже приведен набор обязательных параметров, которые необходимо указать при формировании информационного сообщения (ключи должны следовать в отсортированном порядке, как в таблице ниже):
Ключ | Описание | Тип | Пример |
---|---|---|---|
subscriberId | Идентификатор партнера в системе MonetaId | String | |
unitId | Идентификатор пользователя в НКО “Монета”, для которого необходимо провести идентификацию. | Число | 11111 |
phone | Сотовый телефон. Сотовый телефон в личном кабинете пользователя должен быть “подтвержден”. | Число | 9001234567 |
cnonce | Одноразовый код, выбранный случайным или псевдослучайным образом, использующееся для невозможности повторного использования одного и того же токена | Число | 10201010 |
unitId | Идентификатор профиля/юнита в НКО “Монета”, для которого необходимо провести идентификацию. | Число | 100500 |
successURL | URL страницы партнера, куда должен попасть пользователь, если идентификация проведена успешно | URL | |
returnURL | URL страницы партнера, куда должен вернуться пользователь при закрытии виджета | URL | |
failURL | URL страницы партнера, куда должен попасть покупатель, если идентификация не была проведена | URL | |
inprogressURL | URL страницы партнера, куда должен попасть пользователь после успешного запроса на идентификацию, до получения ответа о статусе запроса на идентификацию | URL | |
signature | Код для идентификации отправителя и проверки целостности данных. |
Пример итогового информационного сообщения:
subscriberId=testSubscriber&unitId=1000&phone=9001234567&cnonce=ygfhkJIBiT3kxjq5P74Tc00Ry6nkC5kK&signature=cf1299778ba5b9310bd2cd42747a43fb79ce72aad16a22704e633900c6dbc9e9a4b61afe53c3fec27c600ef5625a0423b75cc4d96ecaf2890b1dff8db36d4d03
Формирование подписи
После того, как информационное сообщение сформировано, необходимо вычислить подпись/хеш с использованием общего секрета - ApiSecret.
Кодирование ключа производится путем конкатенации в одну строку значений параметров запроса и кода проверки целостности данных, кодированием по алгоритму HMAC-SHA512 и представлением массива байт в виде строки шестнадцатеричных чисел:
Алгоритм формирования:
- Вычислить HMAC-SHA512 хеш используя пару (информационное сообщение, секрет).
- Полученный массив байт перевести в строку в шестнадцатеричном представлении.
// 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 параметрами.
Список передаваемых партнеру параметров:
Ключ | Тип | Описание | Пример |
---|---|---|---|
type | string | тип уведомления: IDENTIFICATION | type=IDENTIFICATION |
unitId | number | идентификатор юзера в монете, который проходил проверку. | unitId=10050 |
status | string | статус прохождения УПРИД: SUCCEEDED | status=SUCCEEDED |
message | string | 10201010 | |
signature | string | подпись всех переданных параметров. | signature=1d9…db6 |
Проверка signature
Подпись всех переданных параметров через механизм аналогичный механизму формирования подписи от партнера.
Таким образом партнер может убедиться в достоверности вызова, сделав проверку:
hmac_sha512(params, secret) == signature
Где params - это значениия параметров запроса.
Код ответа на запрос с уведомлением о статусе идентификации
Для того, чтобы сообщить Moneta Id, что партнер получил информацию о статусе идентификации, скрипт партнера (statusURL) должен дать ответ с http-кодом 200.
Попытки отправки уведомления будут повторены:
- Если Moneta Id не смогла получить ответот обработчика.
- Если сервер партнера был недоступен.