2017-02-23 1 views
0

Ich benutze Angular js Frontend-Anwendung und Web-API-Backend. Ich möchte Google Recaptcha in der Front-End-Anwendung verwenden. Ich kann das Widget durch Verweis auf die folgende URL anzeigen lassen. https://developers.google.com/recaptcha/docs/display. In diesem Dokument wird nicht über die serverseitige Überprüfung mit dem geheimen Schlüssel gesprochen. Aber ich habe bemerkt, dass einige asp.net Entwickler serverseitige Implementierung verwenden, um die Google Recaptcha Antwort mit dem geheimen Schlüssel zu überprüfen. Muss ich eine serverseitige Validierung mit dem geheimen Schlüssel durchführen und was ist der beste Weg, dies in Bezug auf eckige und Web-API zu tun?Verwenden Sie Google Recaptcha mit Angular und WebAPI

Antwort

0

Ja, Sie müssen eine serverseitige Überprüfung durchführen, da andernfalls Ihre nicht authentifizierten API-Endpunkte nicht durch direkte Aufrufe geschützt sind, die nicht über Ihre Website laufen.

Die Lösung ist ziemlich straight-foward und wird hier beschrieben: https://developers.google.com/recaptcha/docs/verify

Aber ein sehr einfaches Beispiel für ein Verfahren, das die g-recaptcha-response von der Website gegeben validiert würde wie folgt aussehen:

public bool Validate(string encodedResponse) 
    { 
     if (string.IsNullOrEmpty(encodedResponse)) return false; 

     var secret = **your secret**; 
     if (string.IsNullOrEmpty(secret)) return false; 

     var client = new System.Net.WebClient(); 

     var googleReply = client.DownloadString(
      $"https://www.google.com/recaptcha/api/siteverify?secret={secret}&response={encodedResponse}"); 

     return JsonConvert.DeserializeObject<RecaptchaResponse>(googleReply).Success; 
    } 

RecaptchaResponse ist eine einfache Klasse, die wir haben, die so aussieht:

public class RecaptchaResponse 
{ 
    [JsonProperty("success")] 
    public bool Success { get; set; } 

    [JsonProperty("error-codes")] 
    public IEnumerable<string> ErrorCodes { get; set; } 

    [JsonProperty("challenge_ts")] 
    public DateTime ChallengeTs { get; set; } 

    [JsonProperty("hostname")] 
    public string Hostname { get; set; } 
}