Сегодня мы расскажем как сделать двухфакторную авторизацию (2FA) на Java
Пользователь находится на сайте / мобильном приложении и вы хотите, чтобы он подтвердил свой номер телефона при регистрации/авторизации, подтверждение операции оплаты и прочее.
После нажатия на “получить смс” пользователь получит сообщение вида CODE20.
Где CODE20 — это строка от 1 до 16 символов, состоящая из букв, цифр или букв и цифр одновременно.
Итак, пользователь нажал “получить смс”.
Вы отправляете запрос на SMS.BY — sendSmsWithCode()
Данный вызов API вернет вам код сообщения “CODE20” и этот же код будет отправлен пользователю.
Пользователь вводит код и вы проверяете, что код совпадает, и если все ОК — то пропускаете пользователя дальше.
Теперь подробнее с примерами кода
Для начала давайте распишем алгоритм:
- Создать объект класса SMS_BY
- Указать токен
- Настроить PasswordObject
- Получить ID PasswordObject
- Вызвать метод sendSmsWithCode
- Сравнить вводимый код от пользователя с тем, который вернут метод sendSmsWithCode
Качаем исходники отсюда
Двухфакторная авторизация работает следующим образом.
Вы настраиваете длину и конфигурацию пароля, после этого у вас будет ID.
Далее по этому ID вы отправляете смс и в ответ вам приходит код, который отправляется пользователю.
В нашей системе такая настройка реализуется через PasswordObject.
PasswordObject — это настройки, которые вы можете использовать в двухфактороной верификации.
Например вам надо, чтобы пароль состоял только из только букв или только цифр или и то и другое, с длиной пароля в 5 символов.
Создание таких настроек выглядит следующим образом:
[cce lang=»java» tab_size=»5″ lines=»14″ width=»860″]
// настройка длины пароля при двухфакторной авторизации с длиной пароля в 5 символов.
createPasswordObject(SMS_BY.PASS_TYPE_LETTERS, 5) ; // только буквы латиницы
createPasswordObject(SMS_BY.PASS_TYPE_NUMBERS, 5) ; // только цифры
createPasswordObject(SMS_BY.PASS_TYPE_BOTH, 5) ; // и буквы и цифры
[/cce]
Чтобы отправить смс с кодом нужно сделать вызов:
[cce lang=»java» tab_size=»5″ lines=»14″ width=»860″]
oStart.sendSmsMessageWithCode(«Ваш пароль: %CODE%», «245», phone,alphaname_id );
«Ваш пароль: %CODE%» — текст сообщения, %CODE%
— обязательный параметр, вместо %CODE% будет подставлен<
сгененированный пароль для получателя.
«245» — это ID PasswordObject созданный ранее
phone — номер телефона
alphaname_id — ID Альфа-имени, если Альфа-имени пока нет, нужно передавать 0
sendSmsMessageWithCode вернет:
{«status»:»ok»,»parts»:1,»len»:21,»sms_id»:2208471,»code»:»GAYXILYZOX»}
[/cce]
Из этого сообщения вам надо получить код, который будет вводить пользователь на форме двухфакторной авторизации:
[cce lang=»java» tab_size=»5″ lines=»14″ width=»860″]
code = GAYXILYZOX
[/cce]
Пример кода:
[cce lang=»java» tab_size=»5″ lines=»14″ width=»860″]
String password_object_id = oStart.createPasswordObject(«both»,4);
Integer alphaname_id = new Integer(0);
str = oStart.sendSmsMessageWithCode («Ваш пароль: %CODE%», password_object_id,SMS_BY_Sample.phone,alphaname_id );
SMS_BY_Sample.print(str);
[/cce]
