2010-04-14 15 views
6

Hemos comenzado a usar el control ASP.NET recaptcha y funciona bien. pero uno de los requisitos que tenemos es que todo el tráfico saliente pase por Https..NET Recaptcha https

Sé que recaptcha admite https, pero no está claro cómo configurar (o incluso si es configurable) cuando se utiliza la opción del complemento ASP.NET.

¿alguien ha tenido alguna experiencia al respecto?

Voy a ampliar un poco en lo que he encontrado hasta ahora ....

El paquete Reconocer texto contiene 3 clases públicas

RecaptchaControl, RecaptchaValidator y RecaptchaResponse

RecaptchaControl es un Asp Control de .NET, los métodos específicos de recaptcha parecen estar relacionados con temas/apariencia.

Una instancia del Validator tiene un campo RemoteIP (que supongo que representaría el servidor de verificación), pero no puedo vincularlo con el control.

RecaptchaResponse parece representar más o menos una enumeración con posibles respuestas (válida/no válida/no se pudo conectar).

Parece que el control Recaptcha selecciona inteligentemente https si la solicitud fue https. estoy presumiendo que hace lo mismo para la validación, pero no es claro a partir de código fuente http://code.google.com/p/recaptcha/source/browse/trunk/recaptcha-plugins/dotnet/library/

private const string VerifyUrl = "http://www.google.com/recaptcha/api/verify"; 
private const string RECAPTCHA_SECURE_HOST = "https://api-secure.recaptcha.net";   
private const string RECAPTCHA_HOST = "http://api.recaptcha.net"; 
--------------------------------SNIP------------------------------------ 
/// <summary> 
     /// This function generates challenge URL. 
     /// </summary> 
     private string GenerateChallengeUrl(bool noScript) 
     { 
      StringBuilder urlBuilder = new StringBuilder(); 
      urlBuilder.Append(Context.Request.IsSecureConnection || this.overrideSecureMode ? RECAPTCHA_SECURE_HOST : RECAPTCHA_HOST); 
      urlBuilder.Append(noScript ? "/noscript?" : "/challenge?"); 
      urlBuilder.AppendFormat("k={0}", this.PublicKey); 
      if (this.recaptchaResponse != null && this.recaptchaResponse.ErrorCode != string.Empty) 
      { 
       urlBuilder.AppendFormat("&error={0}", this.recaptchaResponse.ErrorCode); 
      } 

      return urlBuilder.ToString(); 
     } 

Respuesta

12

Si se echa un vistazo http://recaptcha.net/apidocs/captcha/client.html que dice:

"Con el fin de evitar que el navegador advertencias, si utiliza reCAPTCHA en un sitio SSL , debe reemplazar http://api.recaptcha.net con https://api-secure.recaptcha.net. "

Por lo tanto, recaptcha claramente admite envíos HTTPS. ¿El control ASP.NET tiene alguna propiedad que pueda configurar la URL saliente? En el peor de los casos, puede necesitar usar Reflector para examinar el código y ver cómo está construido.

+0

gracias por eso Dan, he agregado algunos detalles a mi pregunta. Ciertamente volveré a visitar con reflector si es necesario, pero espero que alguien me pueda ahorrar el problema. – TygerKrash

+0

Respuesta simple ... Resolví mi problema ... – Ahsan

5

La biblioteca .NET no requiere ninguna configuración para trabajar en el entorno HTTPS. Derivará del actual HttpContext si la solicitud se realiza desde el protocolo HTTPS.

Pero, existe la propiedad RecaptchaControl.OverrideSecureMode que puede usar en caso de que no funcione como se esperaba. Establezca en True para forzar el modo HTTPS.

actualización:

me parece que han entendido mal la pregunta. Me temo que no existe un punto final HTTPS para la verificación reCAPTCHA (entre su servidor y el de ellos).

+0

Estaba ejecutando esto en un equilibrador de carga con descarga de SSL por lo que los nodos no sabían sobre el estado SSL del encabezado habitual. Así que sí, esta anulación fue muy útil, ¡gracias! – QFDev

0

Estamos usando el plugin reCAPTCHA para .NET, y necesitamos hacer dos cosas para que funcione en SSL en nuestro entorno.Nuestro entorno de desarrollo no usa SSL, y nuestros entornos de prueba y producción sí lo hacen.

  1. establecer la propiedad RecaptchaControl.OverrideSecureMode de verdad, como Adrian Godong mencionó en su respuesta original a esta pregunta. Esto permitió que el control funcionara localmente y en dev sin usar SSL, y en prueba y prod utilizando SSL.

    <recaptcha:RecaptchaControl 
        OverrideSecureMode="True" 
        ID="recaptcha" 
        runat="server" 
        Theme="blackglass" 
        /> 
    
  2. Cuando generamos las claves públicas y privadas, que especifica teclas globales. Esto nos permitió utilizar recaptcha en todos nuestros entornos diferentes (local, dev.midominio.com, test.midominio.com y midominio.com) y solucionó el error "input error: invalid referrer".

+0

No creo que esto responda la pregunta para ser honesto. mi consulta es específicamente sobre la solicitud de validación hecha por Recaptcha. Funcionará bien si su aplicación es https o no (a menos que el firewall entre usted y los servidores de google no permita las solicitudes https de salida, en cuyo caso fallará). Mientras que la solicitud de desafío parece cambiar a https automáticamente, puedo ' Vemos basado en el código cómo la solicitud de validación haría lo mismo. particularmente porque el protocolo "http: //" está incrustado en la definición de url. – TygerKrash