
Biblioteca para la verificación del lado del servidor de Google Recaptcha V2/V3 Token de respuesta para ASP.NET.
Recaptcha.verify.net A partir de la versión 2.0.0 admite las siguientes plataformas y cualquier objetivo que admita .NET Standard desde 2.0:
El paquete se puede instalar utilizando la interfaz de usuario de Visual Studio (Herramientas> Nuget Package Manager> Administrar paquetes Nuget para una solución y busque "Recaptcha.verify.net").
También se puede instalar la última versión del paquete utilizando la consola del administrador de paquetes:
PM> Install-Package Recaptcha.Verify.Net
{
"Recaptcha" : {
"SecretKey" : " <recaptcha secret key> " ,
"ScoreThreshold" : 0.5
}
} public void ConfigureServices ( IServiceCollection services )
{
services . AddRecaptcha ( Configuration . GetSection ( "Recaptcha" ) ) ;
//...
} [ ApiController ]
[ Route ( "api/[controller]" ) ]
public class LoginController : Controller
{
private const string _loginAction = "login" ;
private readonly ILogger _logger ;
private readonly IRecaptchaService _recaptchaService ;
public LoginController ( ILoggerFactory loggerFactory , IRecaptchaService recaptchaService )
{
_logger = loggerFactory . CreateLogger < LoginController > ( ) ;
_recaptchaService = recaptchaService ;
}
[ HttpPost ]
public async Task < IActionResult > Login ( [ FromBody ] Credentials credentials , CancellationToken cancellationToken )
{
var checkResult = await _recaptchaService . VerifyAndCheckAsync (
credentials . RecaptchaToken ,
_loginAction ,
cancellationToken ) ;
if ( ! checkResult . Success )
{
if ( ! checkResult . Response . Success )
{
// Handle unsuccessful verification response
_logger . LogError ( "Recaptcha error: {errorCodes}" , JsonConvert . SerializeObject ( checkResult . Response . ErrorCodes ) ) ;
}
if ( ! checkResult . ScoreSatisfies )
{
// Handle score less than specified threshold for v3
}
// Unsuccessful verification and check
return BadRequest ( ) ;
}
// Process login
return Ok ( ) ;
}
}{
"Recaptcha" : {
...
"AttributeOptions" : {
"ResponseTokenNameInHeader" : " RecaptchaTokenInHeader " , // If token is passed in header
"ResponseTokenNameInQuery" : " RecaptchaTokenInQuery " , // If token is passed in query
"ResponseTokenNameInForm" : " RecaptchaTokenInForm " // If token is passed in form
}
}
}O establecer en la startup getRponseTokenFromActionArguments o GetResponsetokenfromexecutingContext Delegate que señala cómo obtener el token de los datos analizados.
services . AddRecaptcha ( Configuration . GetSection ( "Recaptcha" ) ,
// Specify how to get token from parsed arguments for using in RecaptchaAttribute
o => o . AttributeOptions . GetResponseTokenFromActionArguments =
d =>
{
if ( d . TryGetValue ( "credentials" , out var credentials ) )
{
return ( ( BaseRecaptchaCredentials ) credentials ) . RecaptchaToken ;
}
return null ;
} ) ;El modelo de credenciales utilizado en el ejemplo tiene clase base con propiedad que contiene token.
public class BaseRecaptchaCredentials
{
public string RecaptchaToken { get ; set ; }
}
public class Credentials : BaseRecaptchaCredentials
{
public string Login { get ; set ; }
public string Password { get ; set ; }
} [ Recaptcha ( "login" ) ]
[ HttpPost ( "Login" ) ]
public async Task < IActionResult > Login ( [ FromBody ] Credentials credentials , CancellationToken cancellationToken )
{
// Process login
return Ok ( ) ;
}El umbral de puntaje en AppSettings.json es opcional y el valor podría pasar directamente a la función Verifyandcheckasync.
var scoreThreshold = 0.5f ;
var checkResult = await _recaptchaService . VerifyAndCheckAsync (
credentials . RecaptchaToken ,
_loginAction ,
scoreThreshold ) ;Según el puntaje, puede tomar medidas variables en el contexto de su sitio en lugar de bloquear el tráfico para proteger mejor su sitio. Los umbrales de puntaje especificados para las acciones le permiten lograr un análisis y protección de riesgos adaptativos basados en el contexto de la acción.
{
"Recaptcha" : {
"SecretKey" : " <recaptcha secret key> " ,
"ScoreThreshold" : 0.5 ,
"ActionsScoreThresholds" : {
"login" : 0.75 ,
"test" : 0.9
}
}
} // Response will be checked with score threshold equal to 0.75
var checkResultLogin = await _recaptchaService . VerifyAndCheckAsync ( credentials . RecaptchaToken , "login" ) ;
// Response will be checked with score threshold equal to 0.9
var checkResultTest = await _recaptchaService . VerifyAndCheckAsync ( credentials . RecaptchaToken , "test" ) ;
// Response will be checked with score threshold equal to 0.5
var checkResultSignUp = await _recaptchaService . VerifyAndCheckAsync ( credentials . RecaptchaToken , "signup" ) ;Si la comprobación de la respuesta de verificación debe completarse por separado, puede usar VerifyAsync en lugar de verificar y checkasync.
var response = await _recaptchaService . VerifyAsync ( credentials . RecaptchaToken ) ;La biblioteca puede producir las siguientes excepciones
| Excepción | Descripción |
|---|---|
| EmpacyActionException | Esta excepción se lanza cuando la acción pasada en función está vacía. |
| VacíaCaptchaansWerException | Esta excepción se lanza cuando la respuesta de Captcha pasada en función está vacía. |
| Httprequestexception | Esta excepción se lanza cuando falló la solicitud HTTP. Las tiendas se reenvian. Apiexception como excepción interna. |
| MinScorenotsPecifiedException | Esta excepción se lanza cuando no se especificó una puntuación mínima y la solicitud tenía un valor de puntaje (usado V3 Recaptcha). |
| SecretKeyNotsPecifiedException | Esta excepción se lanza cuando la clave secreta no se especificó en opciones o parámetros de solicitud. |
| DesconocidogurorkeyException | Esta excepción se lanza cuando se desconoce la clave de error de respuesta de verificación. |
Todas estas excepciones se heredan de RecaptchaserviceException.
Se pueden encontrar ejemplos en el repositorio de la biblioteca: