Микросервис guard
Микросервис guard используется для проверки реальности пользователя, использующего Android (кроме Huawei) или IOS, с помощью Google reCAPTCHA.
Логика работы 
-
Клиентская часть: При взаимодействии (например, нажатии кнопки) автоматически вызывается функция для генерации токена reCAPTCHA v3 на веб-сайте. Это происходит без необходимости прямого взаимодействия с пользователем. Если пользователь использует мобильное приложение (IOS, Android), то пользователя просят пройти явную проверку, что он не робот (выбрать картинки), и после пройденной проверки вызывается функция для генерации токена reCAPTCHA v2.
-
Генерация токена: Токен (RCKey) генерируется на стороне клиента на основе анализа поведения (движения мыши, клики и т.д.).
-
Отправка токена: Токен (RCKey) отправляется через Reverse Proxy (например, Nginx) в Auth Orchestration Service, который управляет процессом аутентификации. В рамках запроса по UserAgent определяется, с какого устройства зашел пользователь. В соответствии со значением UserAgent выполняется вызов POST-запроса на Guard Service:
- если пользователь использует веб-сайт, то вызывается POST-запрос recaptchav3/verify;
- если пользователь использует мобильное приложение (IOS, Android), то вызывается POST-запрос recaptchav2/verify
-
Проверка токена: Auth Orchestration Service отправляет токен на Guard Service. Далее этот токен передается в reCAPTCHA (Bot Protected Service) POST-запросом. На этом этапе проверяется, является ли токен действительным (v2 и v3), и какова вероятность этого (score) (только для v3).
-
Оценка: Если оценка вероятности выше установленного порога, запрос считается безопасным, и его можно обрабатывать. Если оценка низкая, можно отклонить запрос или выполнить дополнительные проверки.
В работе микросервиса используется следующие сущности:
- CaptchaV2Request - содержит данные о каптче (reCAPTCHA v2): токен, полученный от клиента (RCKey), который необходимо проверить, и тип ключа;
- CaptchaV2Response - ответ проверки сущности CaptchaV2Request, который указывает, была ли проверка успешной или нет;
- CaptchaV3Request - содержит данные о каптче (reCAPTCHA v3): токен, полученный от клиента (RCKey), который необходимо проверить;
- CaptchaV3Response - ответ проверки сущности CaptchaV3Request, который указывает, была ли проверка успешной, а также содержит оценку вероятности того, что пользователь является человеком, и название действия, которое было передано в процессе проверки.
Аутентификация и авторизация 
Для работы с микросервисом аутентификация и авторизация не требуются.
Service context path 
/api/guard/
Настройки и параметры конфигурации 
Параметры конфигурации указываются в Vault.
Vault используется на нашей платформе в качестве хранилища всех конфигураций развертывания. Инструмент может быть выбран другой.
{
"env": {
"JAVA_XMS": "XXm",
"JAVA_XMX": "YYYm",
"RECAPTCHA_SECRET_KEY": "секретный_ключ",
"RECAPTCHA_V2_SECRET_KEYS": "секретные_ключи_RECAPTCHA_V2",
"RECAPTCHA_V3_SECRET_KEY": "секретный_ключ_RECAPTCHA_V3"
}
}
Методы микросервиса 
Отправка токена reCAPTCHA v2 (мобильное приложение) - POST запрос, v1/recaptchav2/verify
- responseToken - параметр тела запроса, обязательный: Токен, полученный от клиента (RCKey), который необходимо проверить;
- keyType - параметр тела запроса, необязательный: Принимает значения:
default
- значение по умолчанию,ios
- для IOS,android
- для Android. ЕслиkeyType
не передан, то он принимает значениеdefault
.
{
"responseToken": "RESPONSE_TOKEN",
"keyType": "ios"
}
{
"success": true // Указывает, прошла ли проверка токена успешно
}
- 200 - операция выполнена успешно, в теле ответа указан результат проверки
- 400 - ошибка, в теле запроса не указан токен
Отправка токена reCAPTCHA v3 (web) - POST запрос, v1/recaptchav3/verify
- responseToken - параметр тела запроса, обязательный: Токен, полученный от клиента (RCKey), который необходимо проверить.
{
"responseToken": "RESPONSE_TOKEN"
}
{
"success": true // Указывает, прошла ли проверка токена успешно
,"score": 0.9 // Оценка вероятности, что запрос отправлен реальным пользователем (от 0.0 до 1.0)
,"action": "submit" // Действие, для которого выдан токен
}
- 200 - операция выполнена успешно, в теле ответа указан результат проверки
- 400 - ошибка, в теле запроса не указан токен