E-NUM – это система авторизации, используемая для дополнительной защиты закрытых ресурсов онлайн-сервисов посредством секретного ключа (уникальной кодовой книги), хранимой в мобильном устройстве пользователя.
Вы можете легко интегрировать E-NUM авторизацию на Ваш ресурс.
Предлагается два способа интеграции: OAuth2 и Soap.
OAuth 2.0 позволяет предоставить третьей стороне доступ к защищенным ресурсам без необходимости сообщать ей (третьей стороне) данные аутентификации пользователя (число-вопрос, число-ответ).
E-NUM поддерживает спецификацию стандарта OAuth 2.0.
Схема авторизации на сайте банка с использованием системы E-NUM методом OAuth2.
Детальная схема авторизации с использованием системы E-NUM методом OAuth2 (сверху вниз)
URL метода - https://auth.e-num.com/OAuth/Authorize
Метод HTTP протокола - GET
Формат параметров - application/x-www-form-urlencoded
Название | Описание |
---|---|
response_type | Значение параметра - "code" |
client_id | Идентификатор сервиса, полученный в системе E-NUM |
redirect_uri | URL, на который будет отправлен ответ запроса (необходимо указать в настройках сервиса в аккаунте E-NUM) |
scope | Набор запрашиваемых данных клиента из системы E-NUM, разделенный пробелом, например: email phone |
state | Используется для сопоставления запроса и ответа (сквозной параметр) |
curl -i "https://auth.e-num.com/OAuth/Authorize?client_id=cd2068a8-cb18-4d24-bc85-dab0b3d3baf7&redirect_uri=https%3A%2F%2Fenumdemobank.e-num.com%2Fsignin-enum&scope=email%20phone&response_type=code&state=random-state" HTTP/1.1 302 Found Location: https://auth.e-num.com/Account/Login?ReturnUrl=%2FOAuth%2FAuthorize%3Fclient_id%3Dcd2068a8-cb18-4d24-bc85-dab0b3d3baf7%26redirect_uri%3Dhttps%253A%252F%252Fenumdemobank.e-num.com%252Fsignin-enum%26scope%3Demail%2520phone%26response_type%3Dcode%26state%3Drandom-state
URL адрес — заданный параметр redirect_uri при вызове метода запроса кода авторизации
Метод HTTP протокола - GET
Формат параметров - application/x-www-form-urlencoded
Название | Описание |
---|---|
code | Одноразовый код авторизации, действителен в течение короткого промежутка времени |
state | Используется для сопоставления запроса и ответа (сквозной параметр) |
GET https://enumdemobank.e-num.com/signin-enum?code=db8cea2e8bea4328b1ed&state=random-state
Название | Описание |
---|---|
error | Варианты: [invalid_request, unauthorized_client, access_denied, unsupported_response_type, invalid_scope, server_error, temporarily_unavailable] |
error_description | Описание ошибки (Необязательный параметер) |
error_uri | URL описания ошибки (Необязательный параметер) |
state | Используется для сопоставления запроса и ответа |
URL адрес метода - https://auth.e-num.com/OAuth/Token
Метод HTTP протокола - POST
Формат параметров - application/x-www-form-urlencoded
Название | Описание |
---|---|
client_id | Идентификатор, полученный в системе E-NUM |
client_secret | Защищенный ключ, полученный в системе E-NUM |
redirect_uri | redirect_uri использованный при запросе кода авторизации |
grant_type | Значение параметра - "authorization_code" |
code | Одноразовый код авторизации, полученный из метода запроса кода авторизации |
curl -i -d "client_id=cd2068a8-cb18-4d24-bc85-dab0b3d3baf7&client_secret=0e919552-1122-3344-5566-197f151bc349&redirect_uri=https%3A%2F%2Fenumdemobank.e-num.com%2Fsignin-enum&grant_type=authorization_code&code=db8cea2e8bea4328b1ed" "https://auth.e-num.com/OAuth/Token" HTTP/1.1 200 OK Content-Type: application/json;charset=UTF-8 { "access_token":"2YotnFZFEjr1zCsicMWpAA", "token_type":"bearer", "expires_in":900, "refresh_token":"tGzv3JOkF0XG5Qx2TlKWIA" }
Формат параметров - application/json
Название | Описание |
---|---|
access_token | Токен доступа |
token_type | Значение параметра - "bearer" |
expires_in | Время жизни токена, в секундах |
refresh_token | Токен, для повторного получения токена доступа |
Url адрес метода - https://auth.e-num.com/Api/Me
Метод HTTP протокола - GET
Заголовок HTTP запроса - Authorization: Bearer {токен доступа}
$ curl -i -H "Authorization: Bearer 2YotnFZFEjr1zCsicMWpAA" "https://auth.e-num.com/Api/Me" HTTP/1.1 200 OK Content-Type: application/json; charset=utf-8 {"email":"test@example.com","phone":"00000000000"}
Метод интеграции Soap требует разового (первичного) перенаправления клиента на https://auth.e-num.com. Все последующие запросы не требуют перенаправления.
Схема авторизации с использованием системы E-NUM методом Soap.
Для использования этой схемы владелец сайта должен зарегистрироватьcя на https://e-num.com/Account/Consumers.
Веб сервис http://service.e-num.com/Soap.asmx предоставляет базовые методы GetChallenge2 и CheckUserAnswer.
Название | Описание |
---|---|
consumerId | Идентификатор сайта. Берется тут https://e-num.com/Account/Consumers, значение Client ID. |
Email пользователя | |
userIp | IP-адрес пользователя |
crc | Код проверки параметров. Вычисляется хеш-функцией sha256(consumerSecret + email). Берется тут https://e-num.com/Account/Consumers, значение Client Secret. Результат хеш функции должен иметь строковой формат без дефисов и в нижнем регистре. |
Название | Описание |
---|---|
ErrorCode | Код результата, описан ниже. |
Challenge | Число-вопрос |
QrUrl | URL QR-кода числа-вопроса |
SessionId | Идентификатор сессии, используется для автоподстановки числа-ответа |
Код | Описание |
---|---|
0 | Успех |
4 | Пользователь с указанным email не обнаружен |
5 | Ошибка авторизации. Причиной может быть неверный consumerId или неправильно вычисленное значение параметра crc. |
301 | Пользователь еще не дал разрешение на использование ENUM-авторизации этому сайту. Смотрите ниже. |
Другие коды | Чтобы получить описание кода необходимо вызвать метод GetErrDesc. |
При получении кода 301, сайт должен перенаправить пользователя по адресу https://auth.e-num.com/permission/ask?consumerId={consumerId}&email={email}&redirectUrl={redirectUrl}&nonce={nonce}
redirectUrl | доменная часть должна совпадать с веб-сайтом проекта https://e-num.com/Account/Consumers |
nonce | опциональный сквозной параметр |
Если пользователь дает разрешение, происходит его перенаправление на указанный redirectUrl с GET параметром allow=1. Если пользователь запрещает использование, происходит перенаправление с параметром deny=1. Ниже приведены другие GET параметры передаваемые к redirectUrl.
Email пользователя | |
crc | Код проверки параметров и признак того что этот запрос исходит из сервера авторизации E-NUM. Вычисляется хеш-функцией sha256(consumerSecret + email). Берется тут https://e-num.com/Account/Consumers, значение Client Secret. Результат хеш функции должен иметь строковой формат без дефисов и в нижнем регистре. |
Название | Описание |
---|---|
consumerId | Идентификатор сайта. Берется из страницы проекта https://e-num.com/Account/Consumers, значение Client ID. |
Email пользователя | |
userIp | IP адрес пользователя |
challenge | Число-вопрос |
response | Число-ответ |
addname | Опциональное название сервиса, используется в логах |
crc | Код проверки параметров. Вычисляется по формуле sha256(consumerSecret + response). Тут consumerSecret берется из страницы проекта https://e-num.com/Account/Consumers, значение Client Secret. Результат хеш функции должен иметь строковой формат без дефисов и в нижнем регистре. |
ErrorCode | Код результата, описан выше, в описании метода GetChallenge2. |
Число-ответ можно автоматически подставлять в форму ответа на сайте путем отправки из мобильного клиента E-NUM. Для этого необходимо добавить следующий javascript-код в страницу формы авторизации:
... <form id="login" method="post"> ... <input type="text" name="response" id="response" /> ... </form> ... <script src="https://signalr2.enum.ru/js/jquery.min.js"></script> <script src="https://signalr2.enum.ru/js/signalr.min.js"></script> <script> $(function () { // сюда надо передавать параметр, полученный из метода GetChallenge2 var sessionId = '<%= SessionId %>'; var connection = new signalR.HubConnectionBuilder() .withUrl('https://signalr2.enum.ru/autoResponseHub?sessionId=' + sessionId, { skipNegotiation: true, transport: signalR.HttpTransportType.WebSockets }) .build(); connection.on('response', function (response) { if ($.trim(response) !== '') { $('input#response').focus(); $('input#response').val(response); $('form#login').submit(); } }); connection.start(); }); </script>
На примере несуществующего банка демонстрируем возможность авторизации с использованием E-NUM методом OAuth2.
Вы можете реализовать свой OAuth2-клиент E-NUM (согласно описанию методов API выше), или воспользоваться готовыми клиентскими библиотеками под вашу платформу.
Библиотека для Microsoft ASP.NET + Owin.