2017-02-23 10 views
0

私はAngular jsフロントエンドアプリケーションとWeb APIバックエンドを使用しています。私はフロントエンドのアプリケーションでGoogleのrecaptchaを使用したい。次のURLを参照してウィジェットを表示させることができます。 https://developers.google.com/recaptcha/docs/display。このドキュメントでは、秘密鍵によるサーバー側の検証については説明しません。しかし私はいくつかのasp.net開発者が秘密鍵でGoogleのrecaptcha応答を検証するためにサーバー側の実装を使用していることに気付いた。私は、秘密鍵を使ってサーバー側の検証を行う必要があります。角度APIとWeb APIに関連して、これを行うにはどうすればよいでしょうか?AngularとWebAPIでgoogle recaptchaを使用

答えて

0

はい、サーバー側の検証を行う必要があります。そうしないと、認証されていないAPIエンドポイントがWebサイトを経由しない直接コールによって保護されません。

ソリューションは、かなりストレートフォワードであり、ここで詳述されている: https://developers.google.com/recaptcha/docs/verify

しかし、このようになります。ウェブサイトで与えg-recaptcha-responseを検証します方法の非常に単純な例:

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は次のような単純なクラスです:

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; } 
} 
関連する問題