
Bibliothèque pour la vérification côté serveur de Google RecaptCha V2 / V3 Token de réponse pour ASP.NET.
Recaptcha.verify.net à partir de la version 2.0.0 prend en charge les plates-formes suivantes et toute cible qui prend en charge la norme .NET à partir de 2.0:
Le package peut être installé à l'aide de l'interface utilisateur Visual Studio (Tools> Nuget Package Manager> Gérer les packages NuGet pour la solution et rechercher "recaptcha.verify.net").
La dernière version du package peut également être installée à l'aide de la console Package Manager:
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
}
}
}Ou défini dans le démarrage de GetResponSetokenFromActionArguments ou GetResponSetokenfromexEcutingContext Delegate qui pointe comment obtenir un jeton à partir de données analysées.
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 ;
} ) ;Le modèle d'identification utilisé dans l'exemple a une classe de base avec un jeton contenant des propriétés.
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 ( ) ;
}Le seuil de score dans AppSettings.json est facultatif et la valeur peut être transmise directement dans la fonction VerifyAndCheckasync.
var scoreThreshold = 0.5f ;
var checkResult = await _recaptchaService . VerifyAndCheckAsync (
credentials . RecaptchaToken ,
_loginAction ,
scoreThreshold ) ;En fonction du score, vous pouvez prendre des actions variables dans le contexte de votre site au lieu de bloquer le trafic pour mieux protéger votre site. Les seuils de score spécifiés pour les actions vous permettent d'atteindre l'analyse et la protection des risques adaptatifs en fonction du contexte de l'action.
{
"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 vérification de la réponse de vérification doit être terminée séparément, vous pouvez utiliser VerifyAsync au lieu de VerifyAndCheckasync.
var response = await _recaptchaService . VerifyAsync ( credentials . RecaptchaToken ) ;La bibliothèque peut produire des exceptions suivantes
| Exception | Description |
|---|---|
| VideActionException | Cette exception est lancée lorsque l'action passée en fonction est vide. |
| Videcaptchaanswerexception | Cette exception est lancée lorsque la réponse CAPTCHA transmise dans la fonction est vide. |
| HttpRequestException | Cette exception est lancée lorsque la demande HTTP a échoué. Stocks Refit.apiexception comme exception intérieure. |
| MINSCORENOTSPECIFIEDException | Cette exception est lancée lorsque le score minimal n'a pas été spécifié et que la demande avait une valeur de score (utilisée v3 recaptcha). |
| SecretKeyNoTSpecifiedException | Cette exception est lancée lorsque la clé secrète n'a pas été spécifiée dans les options ou les paramètres de demande. |
| UnknownerrorkeyException | Cette exception est lancée lorsque la clé d'erreur de réponse de vérification est inconnue. |
Toutes ces exceptions sont héritées de RecaptChaserviceException.
Des exemples peuvent être trouvés dans le référentiel de la bibliothèque: