понедельник, 27 марта 2017 г.

Интеграция с Google reCaptcha

Капча - один из очень распространённых и часто используемых способов для защиты приложений от атак.
Существуют различные имплементации капчи, от сторонних вендоров до собственных вариантов. При этом предложение от Google'а - reCapthcha - выглядит весьма привлекательным. Аргументы "за":
  • достаточно известный вендор ))
  • хороший экспириенс как для пользователей (не очень сложно), так и для компании (достаточно безопасно)
  • есть WCAG-compliance 
  • простая интеграция в приложение буквально в несколько действий.
Именно об интеграции и пойдёт речь дальше.


Как же это работает?

Компания, её представитель ил разработчик регистрируется / логинится на https://www.google.com/recaptcha/admin и регистрирует там свой домен. Доменов можно указать несколько. При регистрации домена создаваемые ключи действительны для всех поддоменов.

После регистрации домена он получает два ключа - публичный site key и приватный secret key. Как следует из названий (и в полной аналогии с ассиметричными ключами шифрования), публичный ключ доступен всем и используется на сайте, приватный - не афишируется и применяется для back-2-back взаимодействия.

На фронтэнд части встраивается reCaptcha-клиент - пользователю отображается привычный виджет, в котором верят на слово или просят что-нибудь кликнуть.
Варианты описаны на reCaptcha v2 client side. "Наш" вариант использует Explicitly render the reCAPTCHA widget кейс.

После подтверждения запрос (вместе с публичным ключом) с фронтэнда уходит на сервер Google'а, в ответе возвращается reCaptchaResponse - большущий одноразовый код. На странице он сохраняется в тесктовом hidden поле g-recaptcha-response.

Далее фронтэнд сообщает этот код бэкэнду, который вторым запросом в Google (вместе с приватным ключом и полученным кодом) просит провалидировать. Если всё совпадает - Google говорит ок, иначе фэйлит. Бэкэнд + фронтэнд обрабатывают ответ и соответстввенным образом реагируют на него.

Красота! :-)

Комментариев нет:

Отправить комментарий