CAPTCHA#

reCAPTCHA#

Для отображения сервиса reCAPTCHA при входе по логину и паролю необходимо внести изменения в конфигурационный файл, а также загрузить необходимые файлы (CSS и JS).

Изменения конфигурационного файла должны быть произведены:

  • в блоке настроек blitz.prod.local.idp.captcha. Пример записи настройки приведен ниже:

"captcha" : {
    "exampleCaptcha": {
        "operations": [
            {
                "call": {
                    "headers": [
                        "accept:application/json",
                        "Authorization:Bearer ${cfg.bearerToken}"
                    ],
                    "method": "post",
                    "url": "https://captcha.example.com/captcha/1.0.0/check?uniqueFormHash=${ste.uniqueFormHash}&code=${ocp.code}&options[system]=${cfg.system}&options[token]=${cfg.token}"
                },
                "check": {
                    "errRegExp": {},
                    "okRegExp": {
                        "error": "0"
                    }
                },
                "name": "check",
                "newState": {
                    "uniqueFormHash": "${rsp.result.uniqueFormHash-}"
                }
            },
            {
                "call": {
                    "headers": [
                        "accept:application/json",
                        "Authorization:Bearer ${cfg.bearerToken}"
                    ],
                    "method": "get",
                    "url": "https://captcha.example.com/captcha/1.0.0/create?type=${cfg.type}&options[system]=${cfg.system}&options[token]=${cfg.token}"
                },
                "name": "create",
                "newState": {
                    "uniqueFormHash": "${rsp.result.uniqueFormHash-}"
                }
            },
            {
                "call": {
                    "headers": [
                        "accept:application/json",
                        "Authorization:Bearer ${cfg.bearerToken}"
                    ],
                    "method": "post",
                    "url": "https://captcha.example.com/captcha/1.0.0/refresh?uniqueFormHash=${ste.uniqueFormHash}&type=${cfg.type}&options[system]=${cfg.system}&options[token]=${cfg.token}"
                },
                "name": "refresh"
            }
        ],
        "plainParams": {
            "type": "arithmetic"
        },
        "secureParams": {
            "bearerToken": "<access_token>",
            "system": "<system_id>",
            "token": "<system_token>"
        }
    }
}

В этом блоке содержатся параметры вызова трех методов сервиса reCAPTCHA (create, check, refresh), а также секретные параметры – маркер доступа (bearerToken), идентификатор системы (system), а также токен системы (token).

  • в блоке настроек входа по логину и паролю blitz.prod.local.idp.password. Внутри этого блока следует добавить блок captcha и настроить согласно примеру:

"captcha" : {
  "enabled": true,
  "initJs": "require(['https://demo.reaxoft.ru/themes/default/assets/js/passwordCaptcha.js', 'captcha-conf'], function(captcha, conf){ captcha(conf, 'https://demo.reaxoft.ru/themes/default/assets/css/passwordCaptcha.css');});",
  "mode": {
    "type": "always_on"
  },
  "name": "exampleCaptcha"
}

В этом блоке следует настроить следующие параметры:

  • enabled – признак того, включена CAPTCHA или нет (true/false);

  • initJs – содержит ссылки на JS-скрипт и CSS-стили, загружаемые на странице входа и необходимые для отображения/вызова CAPTCHA на странице входа;

  • mode – режим отображения CAPTCHA, предусмотрены следующие режимы:

    • always_on – CAPTCHA отображается всегда;

    • on_header – CAPTCHA отображается, если в запросе есть заголовок, указанный в параметре name, и значением, указанном в параметре value.

    • by_brute_force_protection – CAPTCHA отображается, если Blitz Identity Provider обнаружил подбор пароля к конкретной учетной записи или массовый подбор пароля ко всем учетным записям.

При использовании режима by_brute_force_protection требуется дополнительно создать в блоке blitz.prod.local.idp.password блок настроек bruteForceProtection со следуюшими настройками:

  • disabled – выключена или нет защита (true/false);

  • captcha – использовать ли тест CAPTCHA при срабатывании защиты (true/false);

  • delay – время задержки входа в секундах (применяется, если выключено использование CAPTCHA);

  • блок system в настройке thresholds – если необходима защита на уровне системы (защита от перебора на разные логины). Задаются настройки:

    • minAttemptsToActivate – минимальное кол-во прошедших входов для включения механизма защиты на основе статистики системы (по умолчанию 100 входов);

    • timeWindowInMin – временное окно сбора статистики по соотношению успешных и неуспешных входов в минутах, должно быть четным (по умолчанию 100 минут);

    • failedAttemptsPercent, настройка turnOff – порог выключения автоматической защиты, в процентах;

    • failedAttemptsPercent, настройка turnOn – порог включения автоматической защиты, в процентах.

    • forced – включить принудительно защиту для всех (true/false).

  • блок system в настройке thresholds – если необходима защита на уровне отдельных пользователей (защита от подбора пароля на конкретного пользователя). Задаются настройки:

    • ttlInSec – период, за который накапливается счетчик неуспешных входов по пользователю в секундах (по умолчанию 3600 секунд);

    • failedAttempts, настройка turnOn – количество ошибочных входов за период, после которого для учетной записи включится защита.

Пример настроек блока bruteForceProtection (включена только защита на уровне пользователя):

"bruteForceProtection" : {
    "delay" : 0,
    "captcha" : true,
    "disabled" : false,
    "thresholds" : {
        "user" : {
            "failedAttempts" : {
                "turnOn" : 5
            },
            "ttlInSec" : 3600
        }
    }
}

Пример настроек bruteForceProtection (включена защита на уровне пользователя и на уровне системы):

"bruteForceProtection" : {
    "disabled": false,
    "delay" : 0,
    "captcha" : true,
    "thresholds" : {
        "system" : {
            "minAttemptsToActivate": 1000,
            "timeWindowInMin": 180,
            "failedAttemptsPercent" : {
                "turnOff" : 20,
                "turnOn" : 30
            },
            "forced" : false
        },
        "user" : {
            "ttlInSec": 3600,
            "failedAttempts" : {
                "turnOn" : 5
            }
        }
    }
}

В случае использования в качестве CAPTCHA сервиса Google reCAPTCHA v3 необходимо:

  • задать следующие настройки в blitz.prod.local.idp.captcha:

"captcha" : {
  "reCAPTCHAv3" : {
    "operations" : [
      {
        "call" : {
          "headers" : [],
          "method" : "post",
          "url" : "https://www.google.com/recaptcha/api/siteverify?secret=${cfg.secret}&response=${ocp.response}"
        },
        "check" : {
          "errRegExp" : {},
          "okRegExp" : {
            "score" : "1\\.0|0\\.(5|6|7|8|9)",
            "success" : "true"
          }
        },
        "name" : "verify"
      }
    ],
    "plainParams" : {
      "sitekey" : "SITE_KEY"
    },
    "secureParams" : {
      "secret" : "SITE_SECRET"
    }
  }
}

Вместо SITE_KEY и SITE_SECRET нужно заполнить значения, полученные при регистрации Google reCAPTCHA v3 на сайте https://g.co/recaptcha/v3. Также нужно скорректировать значение в параметре score – установить требуемый порог успешного прохождения проверки (в примере выставлен порог не ниже 0,5).

  • задать следующие настройки в blitz.prod.local.idp.password.captcha:

"captcha" : {
  "mode" : {
    "_name" : "X-Captcha-Check",
    "_value" : "true",
    "_type" : "on_header",
    "type" : "always_on"
  },
  "enabled" : true,
  "initJs" : "require(['/blitz/assets/blitz-common/javascripts/recaptcha_v3.js', 'captcha-conf'], function(captcha, conf){ captcha(conf);});",
  "name" : "reCAPTCHAv3"
}

Для добавления CAPTCHA на страницу подтверждения привязки учетной записи пользователя к учетной записи из внешнего поставщика идентификации необходимо задать следующие настройки в blitz.prod.local.idp.externalIdps.captcha:

"captcha" : {
  "mode" : {
    "_name" : "X-Captcha-Check",
    "_value" : "true",
    "_type" : "on_header",
    "type" : "always_on"
  },
  "enabled" : true,
  "initJs" : "require(['/blitz/assets/blitz-common/javascripts/recaptcha_v3.js', 'captcha-conf'], function(captcha, conf){ captcha(conf);});",
  "name" : "reCAPTCHAv3"
}

Для добавления CAPTCHA на страницу регистрации пользователей необходимо задать следующие настройки в blitz.prod.local.idp.provisioning.registration.captcha:

"captcha" : {
  "mode" : {
    "_name" : "X-Captcha-Check",
    "_value" : "true",
    "_type" : "on_header",
    "type" : "always_on"
  },
  "enabled" : true,
  "initJs" : "require(['/blitz/assets/blitz-common/javascripts/recaptcha_v3.js', 'captcha-conf'], function(captcha, conf){ captcha(conf);});",
  "name" : "reCAPTCHAv3"
}

Для добавления CAPTCHA на страницу восстановления пароля необходимо задать следующие настройки в blitz.prod.local.idp.provisioning.recovery.captcha:

"captcha" : {
  "mode" : {
    "_name" : "X-Captcha-Check",
    "_value" : "true",
    "_type" : "on_header",
    "type" : "always_on"
  },
  "enabled" : true,
  "initJs" : "require(['/blitz/assets/blitz-common/javascripts/recaptcha_v3.js', 'captcha-conf'], function(captcha, conf){ captcha(conf);});",
  "name" : "reCAPTCHAv3"
}

Yandex SmartCaptcha#

Для отображения сервиса Yandex SmartCaptcha при входе по логину и паролю, восстановлении доступа и регистрации необходимо внести изменения в конфигурационный файл.

Изменения конфигурационного файла должны быть произведены:

  • в блоке настроек blitz.prod.local.idp.captcha. Пример записи настройки приведен ниже:

"captcha": {
 "yandexSmartCaptcha": {
     "operations": [
         {
             "call": {
                 "body": {
                     "contentType": "application/x-www-form-urlencoded",
                     "params": {
                         "ip": "${ctx.remoteAddress}",
                         "secret": "${cfg.secret}",
                         "token": "${ocp.token}"
                     }
                 },
                 "headers": [],
                 "method": "post",
                 "url": "https://smartcaptcha.yandexcloud.net/validate"
             },
             "check": {
                 "errRegExp": {},
                 "okRegExp": {
                     "status": "ok"
                 }
             },
             "name": "verify"
         }
     ],
     "plainParams": {
         "sitekey": "ysc1_Bff7fDvtAKsxtenvQWULIDkZKPbTa0ndceLOM55Db757da07"
     },
     "secureParams": {
         "secret": "ysc2_Bff7fDvtAKsxtenvQWULhtZoSHej3zaPHELRwjnu7710754a"
     }
   }
}

В этом блоке в поле secureParams.secret укажите Ключ сервера, в поле plainParams.sitekey укажите Ключ клиента. Опционально в раздел plainParams можно добавить следующие параметры конфигурирования captcha: sitekey, hl, test, webview, invisible, shieldPosition, hideShield. Подробнее про эти параметры можно прочитать по ссылке.

  • в блоке blitz.prod.local.idp.captcha включите Yandex SmartCaptcha в методе входа по паролю, в форме регистрации и восстановления доступа. Общий принцип настройки капчи одинаков для всех методов, он представлен в следующем блоке:

"captcha": {
 "enabled": true,
 "initJs": "require(['/blitz/assets/javascripts/yandex_smart_captcha.js', 'captcha-conf'], function(captcha, conf){ captcha(conf);});",
 "mode": {
     "type": "always_on"
 },
 "name": "yandexSmartCaptcha",
}

В этом блоке в поле initJs указать require(['/blitz/assets/javascripts/yandex_smart_captcha.js', 'captcha-conf'], function(captcha, conf){ captcha(conf);});, в поле name указать yandexSmartCaptcha.

Данный блок необходимо добавить в соответствующие разделы:

"provisioning" : {
               "password" : {
                 "captcha" : {...},
"provisioning" : {
               "registration" : {
                 "captcha" : {...},
"provisioning" : {
               "recovery" : {
                 "captcha" : {...},

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