
Bibliothek zur serverseitigen Überprüfung von Google Recaptcha V2/V3 Antworttoken für ASP.NET.
Recaptcha.verify.net ab Version 2.0.0 unterstützt die folgenden Plattformen und jedes Ziel, das .NET Standard ab 2.0 unterstützt:
Das Paket kann mit Visual Studio UI (Tools> Nuget Package Manager> NUGET -Pakete für Lösung verwalten und nach "recaptcha.verify.net") installiert werden.
Auch die neueste Version des Pakets kann mithilfe der Package Manager -Konsole installiert werden:
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
}
}
}Oder in Startup GetResponTokenFromactionArgumente oder GetresponStekokenFromexexexecutingContext -Delegierter einstellen, die darauf hinweisen, wie man von analysierten Daten ausgestattet wird.
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 ;
} ) ;Das in Beispiel verwendete Anmeldeinformationen verfügt über eine Basisklasse mit Eigenschaften mit 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 ( ) ;
}Score -Schwellenwert in AppStings.json ist optional und der Wert kann direkt in die Funktion verifizieren und CheckaSync übergeben werden.
var scoreThreshold = 0.5f ;
var checkResult = await _recaptchaService . VerifyAndCheckAsync (
credentials . RecaptchaToken ,
_loginAction ,
scoreThreshold ) ;Basierend auf der Punktzahl können Sie im Kontext Ihrer Website variable Aktionen ergreifen, anstatt den Verkehr zu blockieren, um Ihre Website besser zu schützen. Mit den für Aktionen angegebenen Bewertungsschwellen können Sie die Analyse und den Schutz der adaptiven Risikoanalyse und des Schutzes auf der Grundlage des Kontextes der Aktion erreichen.
{
"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" ) ;Wenn die Überprüfung der Verifizierungsantwort separat abgeschlossen werden muss, können Sie VerifyaSync anstelle von VerifyAndCheckaSync verwenden.
var response = await _recaptchaService . VerifyAsync ( credentials . RecaptchaToken ) ;Bibliothek kann nach Ausnahmen erzeugen
| Ausnahme | Beschreibung |
|---|---|
| LeereActionException | Diese Ausnahme wird ausgelöst, wenn die in Funktion bestehende Aktion leer ist. |
| Leerecaptchaanswerexception | Diese Ausnahme wird ausgelöst, wenn die in Funktion übergebene Captcha -Antwort leer ist. |
| HttprequestException | Diese Ausnahme wird ausgelöst, wenn die HTTP -Anfrage fehlgeschlagen ist. Speichert refit.apiexception als innere Ausnahme. |
| MinscorenotSpecifiedException | Diese Ausnahme wird ausgeworfen, wenn nicht minimaler Punktzahl angegeben wurde und die Anforderung einen Bewertungswert hatte (gebrauchte V3 Recaptcha). |
| SecretKeyNotSpecifiedException | Diese Ausnahme wird ausgelöst, wenn der geheime Schlüssel nicht in Optionen oder Anforderungsparamien angegeben wurde. |
| UnbekannteErorkeyException | Diese Ausnahme wird ausgeworfen, wenn der Taste für Überprüfungsantwortfehler unbekannt ist. |
Alle diese Ausnahmen werden von RecaptchaServiceException vererbt.
Beispiele finden sich im Bibliotheksrepository: