Вход по входящему звонку#
Blitz Identity Provider позволяет передавать одноразовые коды для реализации первого фактора аутентификации в номере входящего звонка (метод Flash Call). В этом случае на номер пользователя будет выполнен звонок с заранее неизвестного телефонного номера, последние цифры которого потребуется ввести для входа. Звонок выполняется с разрешения пользователя.
Для настройки метода входа по Flash Call выполните описанную ниже последовательность действий.
Шаг 1. Добавление метода в blitz.conf#
Для того, чтобы в методах аутентификации на вкладке Первый фактор появился метод аутентификации Вход по входящему звонку, выполните следующие действия:
Откройте файл
/usr/share/identityblitz/blitz-config/blitz.conf
.sudo vim /usr/share/identityblitz/blitz-config/blitz.conf
В блоке настроек
blitz.prod.local.idp.login.factors
в первом списке добавьте блок настроек с методомflashCall
:"login" : { "factors" : [ [ { "enabled" : false, "method" : "flashCall" }, … ], [ … ] ], … }
Перезапустите сервисы.
sudo systemctl restart blitz-idp blitz-console blitz-recovery
Шаг 2. Настройка метода в консоли#
В консоли управления выполните следующие действия:
Перейдите в раздел Аутентификация на вкладку Первый фактор. В разделе Вход по входящему звонку задайте следующие настройки:
Длина кода
: количество последних цифр номера входящего звонка, которые будут использоваться в качестве кода на первом факторе аутентификации.Время действия
: количество секунд, после которого код подтверждения перестает действовать и необходим повторный звонок.Количество попыток за один вход
: количество неудачных попыток ввода кода подтверждения при одной попытке входа. Если количество попыток превышено, требуется повторный звонок.Общее количество попыток
: общее число отправок кодов подтверждения и попыток ввода кода подтверждения, после которого данный способ аутентификации будет временно заблокирован.Время блокировки при превышении общего количества попыток, в минутах
: в течение указанного времени данный способ аутентификации будет недоступен пользователю.Общее количество попыток звонка
: общее число звонков, после которого способ аутентификации будет временно заблокирован.Время блокировки при превышении общего количества звонков, в минутах
: в течение указанного времени способ аутентификации будет недоступен пользователю.Название атрибута с мобильном номером пользователя
: выберите из списка атрибут, в котором хранится номер телефона пользователя. На телефон из данного атрибута пользователя будет производиться звонок.Важно
В разделе Источники данных убедитесь, что данный атрибут может быть использован для операций поиска.
Нажмите Сохранить. В результате конфигурация метода будет обновлена и отобразится вкладка Драйвер провайдера звонков.
На вкладке Драйвер провайдера звонков задайте процедуру на Java для интеграции с REST-сервисом провайдера, предоставляющего услугу дозвона, по аналогии с примером ниже. Для написания процедуры используйте документацию провайдера и полученные при регистрации в сервисе провайдера настройки.
package flashcall; import org.slf4j.LoggerFactory; import org.slf4j.Logger; import com.identityblitz.core.loop.http.HttpLoop; import com.identityblitz.core.loop.http.HttpLoopRequest; import com.identityblitz.core.loop.http.HttpLoopResult; import com.identityblitz.core.loop.*; import com.identityblitz.core.loop.http.*; import com.identityblitz.json.JObj; import java.util.Collections; public class FlashCall1FactorFlow implements HttpLoop { private final org.slf4j.Logger logger = LoggerFactory.getLogger("com.identityblitz.idp.flow.dynamic"); @Override public HttpLoopRequest run(final JsObj obj, final HttpLoopResult result) { if (result == null) { final String number = obj.asString("mobile"); return HttpLoop.callBuilder("POST", "https://03b60898.m.pipedream.net") .withHeader("X-Token", "17acf043") .withBody(JsObj.empty.addString("id", "test_project").addString("dst_number", number.substring(number.length() - 10))) .withTimeout(2000) .build(JsObj.empty); } else if (result.status() == 200) { final JsObj body = result.body(); String callerInfo = body.asString("CallerID").substring(0, body.asString("CallerID").length() - 4) + "****"; if (callerInfo.startsWith("8")) callerInfo = "7" + callerInfo.substring(1); return HttpLoop.Ok(JsObj.empty.addString("code", body.asString("CallerID")).addString("caller_info", callerInfo)); //return HttpLoop.Ok(JsObj.empty.addString("code", "84995111111")); } else if (result.status() == 502) { return HttpLoop.error("bad_gateway", Collections.<String, String>singletonMap("status", "" + result.status())); } else { return HttpLoop.error("wrong_http_status", Collections.<String, String>singletonMap("status", "" + result.status())); } } }
Совет
См. подробнее об имплементации кастомных ошибок.
Включите метод Вход по входящему звонку в списке методов на вкладке Аутентификация -> Первый фактор.