寫在前面
友情提示:
Google reCAPTCHA(v3下同) 的使用不需要“梯子”,但申請賬號的時候需要!
Google reCAPTCHA 的使用不需要“梯子”,但申請賬號的時候需要!
Google reCAPTCHA 的使用不需要“梯子”,但申請賬號的時候需要!
那天上班路上刷博客園,看到曉晨大佬的ASP.NET Core 使用 Google 驗證碼(Google reCAPTCHA)手癢不已,回家立馬抽空自己也寫了一遍(基本上抄曉晨大佬的),趁周末寫個文,揮發下余溫;(然而今天晚上下班才匆忙收尾。。。)
日常所見各類奇葩驗證碼
這個太有名了,必須前排
京東的
中文的:
喪心病狂的:
面對這堆無力吐槽的驗證碼,降低用戶體驗不說,也提高了開發成本;
也有很多公司的驗證碼(人機識別)模塊是自己做的,有的甚至做了幾套,還有更甚的甚至用上了理解圖卷積算法,堪稱喪心病狂;
但現在爬蟲橫行,惡意爬取數據,大量肉雞爬取幾乎等於dos攻擊等,這算輕的;稍有不慎,暴力破解、數據泄露等安全問題也着實嚴峻;
so,如果現在說,有人幫你搞定這些(人機識別),讓你的登錄頁面清清爽爽,沒有驗證碼,你想不想爽一把。
我看你也跟我一樣,定抵不住這Google.reCAPTCHA-v3這妖艷貨色婀娜的身姿;
Google.reCAPTCHA(v3)
本文講的reCAPTCHA都是v3,下同;
官方文檔:https://developers.google.com/recaptcha/docs/v3 英文好的自己看看;
一句帶過:reCAPTCHA 會以嵌入js的方式,給網站后台返回一個分數,這個分數是用於判斷用戶是否是機器人,分數的范圍是0~1,分數約接近0,越像機器人;
順便提一句,reCAPTCHA 這妖艷貨色是免費的哦!
申請Google.reCAPTCHA接入權限
注冊站點:https://www.google.com/recaptcha/admin/create
這里很簡單啦,照着我的圖瞎點就行了;
點提交之后,得到:
這兩個kes是配置用的,作用頁面也說清楚了;
很簡單,ok,接下來看看怎么在.net core站點中使用;
繼承入Asp.net Core中
1、創建項目
2、引用程序包
install-package Unicorn.reCAPTCHA.AspNetCore
這個包是曉晨大佬改過的(我也不知道改了什么[捂臉]),就先用它
不想用這個的,可以用https://github.com/TimothyMeadows/reCAPTCHA.AspNetCore
3、寫個簡單的登錄頁
AccountViewModel
public class AccountViewModel
{
[Required]
public string Username { get; set; }
[Required]
public string Password { get; set; }
public string GoogleToken { get; set; }
}
后端:
public IActionResult Login()
{
return View();
}
[HttpPost]
public async Task<IActionResult> Login(AccountViewModel model)
{
if (ModelState.IsValid)
{
var recaptchaReault = await _recaptcha.Validate(model.GoogleToken);
if (!recaptchaReault.success || recaptchaReault.score < 0.08m)
{
ModelState.AddModelError(string.Empty, "老實說,你是不是機器人!");
}
else
{
ModelState.AddModelError(string.Empty, "登錄成功~");
}
}
return View(model);
}
前端:
appsettings.json
{
"RecaptchaSettings": {
"SiteKey": "剛剛申請的SiteKey",
"SecretKey": "剛剛申請的SecretKey",
"Version": "v3",
"Domain": "www.recaptcha.net"
}
}
Startup
services.AddGoogleRecaptcha(Configuration.GetSection("RecaptchaSettings"));
4、簡單測試
我們先把這里改成這樣
然后調試會得到:
我還放到了對外地址上,大家有空可以點來玩玩(但提交不要點太快哦,js異步加載token太快會報錯)
哦,對了,還有一個坑,就是你點登錄按鈕后點瀏覽器的返回按鈕,再點登錄,這個時候百分百識別為機器人,線上用的時候要注意這個問題
總結
以后做有人機驗證需求的登錄頁面,多了個選擇,后面多玩下,自己試着用爬蟲摸一下這個頁面什么的,可靠的話我就投入生產了;
本文示例代碼(也沒寫什么新內容,大部分是看曉晨大佬那篇博客自己實現了一遍)