首页 > 解决方案 > ReCaptcha V3 - 如果验证失败怎么办?

问题描述

我已将不可见的 reCaptcha V3 添加到 asp.net core 6.0 Angular SPA。

  1. 注册MVC页面HTML:
  . . .
  <input type="hidden" name="captcha" id="captchaInput" value="" />
</form>

. . .

@section Scripts {
    <script src="https://www.google.com/recaptcha/api.js?render=@Configuration["Recaptcha:siteKey"]"></script>
    <script>
        grecaptcha.ready(function() {
            grecaptcha.execute('@Configuration["Recaptcha:siteKey"]', { action: 'contact' }).then(function (token) {
                $("#captchaInput").val(token);
            });
        });
    </script>

    <partial name="_ValidationScriptsPartial" />
}

CS

if (ModelState.IsValid)
{
  if (!await _captchaValidator.IsCaptchaPassedAsync(captcha))
    ModelState.AddModelError("captcha", "Captcha validation failed");

有注入了 reCaptcha 验证器的 OIDC 控制器。

一切正常。直到验证失败(例如低分)。

用户不能从这一点继续前进。

我希望验证码成为常规可见的挑战。

我需要一个可行的解决方案——如何给用户第二次机会来证明他们不是机器人,以防 reCaptcha v3 验证失败(无论出于何种原因)。

归功于:https ://github.com/Jarda29/GoogleReCaptcha.V3

标签: c#asp.net-mvcasp.net-corerecaptcha-v3.net-6.0

解决方案


想想,这里有几个问题。

  1. 我应该使用什么 reCaptcha 版本(V2、V3)?
  2. 如何设置验证码?
  3. 如果 reCaptcha 失败,后端应该返回什么?

所以, ...

  1. 自行选择并为您的项目选择。恕我直言,核心优点和缺点是
  • 对于 V2:只允许人类(仅非编程点击有效),检查是不可避免的,有时很难;

  • 对于V3:不仅人类可以通过,而且不烦人。这两个选项都有效。只需为您的项目选择最好的。并配置 V3(如果被选中)。

  1. 设置。V2 没有设置,因为由于其性质,它仅适用于人类。V3score对每个请求都有一个评估用户操作的请求。太低的分数会false让步successtruefalse应在https://g.co/recaptcha/admin/设置该限制值。这不需要代码/配置更新。否则,您可以通过获取整个响应对象Task<JObject> GetCaptchaResultDataAsync(string token)并自行处理对象的score值。在这种情况下,应手动更改限制值(代码或配置)。

注意!在您的站点工作期间,该值可能会发生变化!这取决于用户的行为、他们的 I-net 速度、软件...

注意!初始 gReCaptcha V3 得分值为0.5. 您可以在控制台上使用它。

  1. 如果 reCaptcha 失败,那么它主要是一个机器人。所以不需要实际操作。所以它可能是一个忽略动作 - 根本没有响应动作。让机器人无休止地撞墙。特别是在 V2。如果 V3 正在使用中,那么您可以假设它可能是用户。您可以从后端返回错误消息或 4XX 代码。在前端,可能会有触发用户通知的响应处理——关于可疑行为的错误文本。

PS 对于 QA 来说,有一点要实施 apassway以避免 reCaptcha 检查。不同的构建/配置(QA 手册)或端点/附加密码(QA 自动)来覆盖或跳过await _captchaValidator.IsCaptchaPassedAsync(captcha)结果。


推荐阅读