Saltar al contenido

Cómo implementar reCaptcha V3 en ASP.NET

Eliana, parte de este equipo de trabajo, nos ha hecho el favor de crear este escrito ya que conoce muy bien el tema.

Solución:

Lo más simple:

a) en cshtml (en la parte superior)

@section Scripts

    
    

b) en cshtml dentro del formulario (justo antes de / form>:


c) una función dentro de la clase Pagemodel:

public static bool ReCaptchaPassed(string gRecaptchaResponse)

    HttpClient httpClient = new HttpClient();
    
    var res = httpClient.GetAsync($"https://www.google.com/recaptcha/api/siteverify?secret=your secret key no quotes&response=gRecaptchaResponse").Result;
    
    if (res.StatusCode != HttpStatusCode.OK)
        return false;

    string JSONres = res.Content.ReadAsStringAsync().Result;
    dynamic JSONdata = JObject.Parse(JSONres);
    
    if (JSONdata.success != "true")
        return false;

    return true;

Finalmente, dentro de OnPostAsync al principio:

if (!ModelState.IsValid) 
    return Page();
else

    if (!ReCaptchaPassed(Request.Form["foo"]))
    
        ModelState.AddModelError(string.Empty, "You failed the CAPTCHA.");
        return Page();
    

Editar: he agregado un proyecto de demostración. Consulta este repositorio de github. https://github.com/NIHAR-SARKAR/GoogleRecaptchav3-example-In-asp.net

Desde el frontend (página .aspx) debe enviar una solicitud ajax para pasar el token al servidor backend. Usando “recaptcha.execute” U puede obtener la respuesta y pasar el token usando la solicitud ajax. Por favor, verifique el bloque de código.

 

Enlace de referencia: https://developers.google.com/recaptcha/docs/verify https://developers.google.com/recaptcha/docs/display#js_api

Ahora en aspx.cs necesitas escribir un “[WebMethod]”para recibir el token de la solicitud Ajax.

    [WebMethod]
    public static void CaptchaVerify(string token)
    
            var responseString = RecaptchaVerify(token);
            ResponseToken response = new ResponseToken();
            response = Newtonsoft.Json.JsonConvert.DeserializeObject(responseString.Result);

    

Para obtener la respuesta de google recapcha api, debe usar la llamada asíncrona usando httpClient. también necesita crear una clase que contendrá las mismas propiedades que la respuesta string . Después de obtener “responseString”, debe convertir la respuesta al objeto ResponseToken utilizando Newtonsoft.Json.
response = Newtonsoft.Json.JsonConvert.DeserializeObject(responseString.Result);

private string apiAddress = "https://www.google.com/recaptcha/api/siteverify";

private string recaptchaSecret = googleRecaptchaSecret;

        public async Task RecaptchaVerify(string recaptchaToken)
        
            string url = $"apiAddress?secret=recaptchaSecret&response=recaptchaToken";
            using (var httpClient = new HttpClient())
            
                try
                

                    string responseString=  httpClient.GetStringAsync(url).Result;
                    return responseString;

                
                catch (Exception ex)
                
                    throw new Exception(ex.Message);
                
            
        


        public class ResponseToken
        

            public DateTime challenge_ts  get; set; 
            public float score  get; set; 
            public List ErrorCodes  get; set; 
            public bool Success  get; set; 
            public string hostname  get; set; 
        

Hay varias bibliotecas de Recaptcha disponibles para ASP.Net. Elegí usar reCAPTCHA.AspNetCore porque proporciona un HtmlHelper.

Tenga en cuenta que esta biblioteca solo admite un ReCatpcha por página y no admite el monitoreo pasivo de Recaptcha v3 en páginas que no son de formulario.

Te mostramos reseñas y valoraciones

Si tienes alguna incertidumbre y forma de acrecentar nuestro reseña eres capaz de realizar una interpretación y con deseo lo ojearemos.

¡Haz clic para puntuar esta entrada!
(Votos: 2 Promedio: 4)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *