c# - ReCaptcha V3 - 如果验证失败怎么办?
问题描述
我已将不可见的 reCaptcha V3 添加到 asp.net core 6.0 Angular SPA。
- 注册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 验证失败(无论出于何种原因)。
解决方案
想想,这里有几个问题。
- 我应该使用什么 reCaptcha 版本(V2、V3)?
- 如何设置验证码?
- 如果 reCaptcha 失败,后端应该返回什么?
所以, ...
- 自行选择并为您的项目选择。恕我直言,核心优点和缺点是
对于 V2:只允许人类(仅非编程点击有效),检查是不可避免的,有时很难;
对于V3:不仅人类可以通过,而且不烦人。这两个选项都有效。只需为您的项目选择最好的。并配置 V3(如果被选中)。
- 设置。V2 没有设置,因为由于其性质,它仅适用于人类。V3
score
对每个请求都有一个评估用户操作的请求。太低的分数会false
让步success
。true
或false
应在https://g.co/recaptcha/admin/设置该限制值。这不需要代码/配置更新。否则,您可以通过获取整个响应对象Task<JObject> GetCaptchaResultDataAsync(string token)
并自行处理对象的score
值。在这种情况下,应手动更改限制值(代码或配置)。
注意!在您的站点工作期间,该值可能会发生变化!这取决于用户的行为、他们的 I-net 速度、软件...
注意!初始 gReCaptcha V3 得分值为0.5
. 您可以在控制台上使用它。
- 如果 reCaptcha 失败,那么它主要是一个机器人。所以不需要实际操作。所以它可能是一个忽略动作 - 根本没有响应动作。让机器人无休止地撞墙。特别是在 V2。如果 V3 正在使用中,那么您可以假设它可能是用户。您可以从后端返回错误消息或 4XX 代码。在前端,可能会有触发用户通知的响应处理——关于可疑行为的错误文本。
PS 对于 QA 来说,有一点要实施 apassway
以避免 reCaptcha 检查。不同的构建/配置(QA 手册)或端点/附加密码(QA 自动)来覆盖或跳过await _captchaValidator.IsCaptchaPassedAsync(captcha)
结果。
推荐阅读
- amazon-web-services - yum 无法获取镜像列表 403 Amazon Linux
- javascript - 我可以从另一个变量动态更新 jS 变量的属性吗?
- javascript - 有没有办法在.then 之外打印一个变量?
- typescript - 如何在没有默认导出的情况下从“快递”导入快递?
- xamarin - Xamarin 是否有 UI 编辑器有助于拖放
- python - 在编号列表之后提取内容
- python - 当我在该网站上找不到 m3u8 文件时,如何在视频流网站上获取 ts 文件的总数
- java - 如何显示错误输入的错误消息?
- c# - 当仍然在 main 上调用时,方法将不起作用 C#
- python - 在所有可能形式的两个数组上拆分数组,包括从第一组到第二组的重复顺序,但不重复元素