Вход по входящему звонку#

Blitz Identity Provider позволяет передавать одноразовые коды для реализации первого фактора аутентификации в номере входящего звонка (метод Flash Call). В этом случае на номер пользователя будет выполнен звонок с заранее неизвестного телефонного номера, последние цифры которого потребуется ввести для входа. Звонок выполняется с разрешения пользователя.

Для настройки метода входа по Flash Call выполните описанную ниже последовательность действий.

Шаг 1. Добавление метода в blitz.conf#

Для того, чтобы в методах аутентификации на вкладке Первый фактор появился метод аутентификации Вход по входящему звонку, выполните следующие действия:

  1. Откройте файл /usr/share/identityblitz/blitz-config/blitz.conf.

    sudo vim /usr/share/identityblitz/blitz-config/blitz.conf
    
  2. В блоке настроек blitz.prod.local.idp.login.factors в первом списке добавьте блок настроек с методом flashCall:

    "login" : {
        "factors" : [
            [
                {
                    "enabled" : false,
                    "method" : "flashCall"
                },
                …
            ],
            [
                …
            ]
        ],
        …
    }
    
  3. Перезапустите сервисы.

    sudo systemctl restart blitz-idp blitz-console blitz-recovery
    

Шаг 2. Настройка метода в консоли#

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

  1. Перейдите в раздел Аутентификация на вкладку Первый фактор. В разделе Вход по входящему звонку задайте следующие настройки:

    ../_images/login-flashcall.png
    • Длина кода: количество последних цифр номера входящего звонка, которые будут использоваться в качестве кода на первом факторе аутентификации.

    • Время действия: количество секунд, после которого код подтверждения перестает действовать и необходим повторный звонок.

    • Количество попыток за один вход: количество неудачных попыток ввода кода подтверждения при одной попытке входа. Если количество попыток превышено, требуется повторный звонок.

    • Общее количество попыток: общее число отправок кодов подтверждения и попыток ввода кода подтверждения, после которого данный способ аутентификации будет временно заблокирован.

    • Время блокировки при превышении общего количества попыток, в минутах: в течение указанного времени данный способ аутентификации будет недоступен пользователю.

    • Общее количество попыток звонка: общее число звонков, после которого способ аутентификации будет временно заблокирован.

    • Время блокировки при превышении общего количества звонков, в минутах: в течение указанного времени способ аутентификации будет недоступен пользователю.

    • Название атрибута с мобильном номером пользователя: выберите из списка атрибут, в котором хранится номер телефона пользователя. На телефон из данного атрибута пользователя будет производиться звонок.

      Важно

      В разделе Источники данных убедитесь, что данный атрибут может быть использован для операций поиска.

      ../_images/mobile-search.png

    Нажмите Сохранить. В результате конфигурация метода будет обновлена и отобразится вкладка Драйвер провайдера звонков.

    ../_images/login-flashcall_driver.png
  2. На вкладке Драйвер провайдера звонков задайте процедуру на Java для интеграции с REST-сервисом провайдера, предоставляющего услугу дозвона, по аналогии с примером ниже. Для написания процедуры используйте документацию провайдера и полученные при регистрации в сервисе провайдера настройки.

    Пример процедуры для интеграции с провайдером Flash Call#
    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()));
                          }
                    }
    
    }
    

    Совет

    См. подробнее об имплементации кастомных ошибок.

  3. Включите метод Вход по входящему звонку в списке методов на вкладке Аутентификация -> Первый фактор.