Weryfikowanie odpowiedzi użytkownika

Na tej stronie objaśniono, jak zweryfikować odpowiedź użytkownika na zadanie reCAPTCHA w backendzie aplikacji.

W przypadku użytkowników internetu token odpowiedzi możesz uzyskać na 3 sposoby:

  • g-recaptcha-response parametr POST, gdy użytkownik przesyła formularz na Twojej stronie.
  • grecaptcha.getResponse(opt_widget_id) po ukończeniu testu reCAPTCHA przez użytkownika
  • Jako argument ciągu znaków w funkcji wywołania zwrotnego, jeśli data-callback jest określony w atrybucie tagu g-recaptcha lub w parametrze wywołania zwrotnego w metodzie grecaptcha.render

Jeśli korzystasz z biblioteki Androida, możesz wywołać metodę SafetyNetApi.RecaptchaTokenResult.getTokenResult(), aby uzyskać token odpowiedzi, jeśli stan zakończy się powodzeniem.

Ograniczenia dotyczące tokenów

Każdy token odpowiedzi użytkownika reCAPTCHA jest ważny przez 2 minuty i można go zweryfikować tylko raz, aby zapobiec atakom typu replay. Jeśli potrzebujesz nowego tokena, możesz ponownie uruchomić weryfikację reCAPTCHA.

Gdy otrzymasz token odpowiedzi, musisz go zweryfikować w ciągu 2 minut za pomocą reCAPTCHA przy użyciu poniższego interfejsu API, aby upewnić się, że token jest prawidłowy.

Żądanie do interfejsu API

URL: https://www.google.com/recaptcha/api/siteverify Metoda: POST

Parametr POST Opis
secret Wymagane. Klucz wspólny dla Twojej witryny i reCAPTCHA.
response Wymagane. Token odpowiedzi użytkownika udostępniany przez integrację po stronie klienta reCAPTCHA w Twojej witrynie.
remoteip Opcjonalnie. Adres IP użytkownika.

Odpowiedź interfejsu API

Odpowiedź to obiekt JSON:

{
  "success": true|false,
  "challenge_ts": timestamp,  // timestamp of the challenge load (ISO format yyyy-MM-dd'T'HH:mm:ssZZ)
  "hostname": string,         // the hostname of the site where the reCAPTCHA was solved
  "error-codes": [...]        // optional
}

W przypadku reCAPTCHA na Androidzie:

{
  "success": true|false,
  "challenge_ts": timestamp,  // timestamp of the challenge load (ISO format yyyy-MM-dd'T'HH:mm:ssZZ)
  "apk_package_name": string, // the package name of the app where the reCAPTCHA was solved
  "error-codes": [...]        // optional
}

Odniesienie do kodu błędu

Kod błędu Opis
missing-input-secret Brak parametru obiektu tajnego.
invalid-input-secret Parametr obiektu tajnego jest nieprawidłowy lub źle sformułowany.
missing-input-response Brak parametru odpowiedzi.
invalid-input-response Parametr odpowiedzi jest nieprawidłowy lub źle sformułowany.
bad-request Żądanie jest nieprawidłowe lub źle sformułowane.
timeout-or-duplicate Odpowiedź jest już nieważna: jest zbyt stara lub została już użyta.