在AspNetCore中使用極驗(yàn)做行為認(rèn)證的驗(yàn)證流程
極驗(yàn)驗(yàn)證
極驗(yàn)驗(yàn)證是一種在計(jì)算機(jī)領(lǐng)域用于區(qū)分自然人和機(jī)器人的,通過(guò)簡(jiǎn)單集成的方式,為開(kāi)發(fā)者提供安全、便捷的云端驗(yàn)證服務(wù)。
與以往傳統(tǒng)驗(yàn)證碼不同的是,極驗(yàn)通過(guò)分析用戶完成拼圖過(guò)程中的行為特征,通過(guò)數(shù)據(jù)分析來(lái)判斷是人還是機(jī)器。用戶不必面對(duì)眼花繚亂的英文字符或漢字,整個(gè)驗(yàn)證過(guò)程變的像游戲一樣有趣。
先上效果圖

極驗(yàn)的流程
極驗(yàn)官方文檔地址 https://docs.geetest.com/install/deploy/server/csharp
簡(jiǎn)單說(shuō)明一下極驗(yàn)的驗(yàn)證流程
引用官方的圖片

•向服務(wù)器發(fā)送請(qǐng)求獲取驗(yàn)證參數(shù)
•客戶端sdk完成驗(yàn)證
•由客戶端sdk驗(yàn)證數(shù)據(jù)提交服務(wù)器二次驗(yàn)證
在netcore中使用極驗(yàn)
在我查看官方的sdk過(guò)后,發(fā)現(xiàn)不是特別好用,根據(jù)極驗(yàn)的流程寫(xiě)了一套適用于netcore的極驗(yàn)sdk 開(kāi)源地址 已經(jīng)發(fā)了nuget包 搜索sharpplug.geetest即可
使用方式很簡(jiǎn)單,下面通過(guò)一個(gè)例子來(lái)進(jìn)行講解
使用命令dotnet new mvc創(chuàng)建一個(gè)mvc項(xiàng)目
下一步使用命令dotnet add package sharpplug.geetest安裝nuget包
打開(kāi)startup文件在ConfigureServices中配置geetest服務(wù)
我在極驗(yàn)申請(qǐng)了一個(gè)測(cè)試用的id和key 大家可以直接測(cè)試使用
public void ConfigureServices(IServiceCollection services)
{
services.Configure<CookiePolicyOptions>(options =>
{
// This lambda determines whether user consent for non-essential cookies is needed for a given request.
options.CheckConsentNeeded = context => true;
options.MinimumSameSitePolicy = SameSiteMode.None;
});
// GeetestOptions中配置id 與 key
services.AddGeetest(opt=>{
opt.Id = "e2697c763685a34be93a7d255ee06b59";
opt.Key = "7882a2d954106041a731f5e10038982a";
});
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
}
完成獲取驗(yàn)證參數(shù)與二次驗(yàn)證的類是GeetestManager,它主要有兩個(gè)方法
獲取驗(yàn)證參數(shù)方法是Register,它主要有三個(gè)參數(shù) userid(用戶標(biāo)識(shí)) clientType(客戶端類型) 與 ipaddress(客戶端ip) 關(guān)于參數(shù)的細(xì)節(jié)大家可以去參閱極驗(yàn)文檔
Task<GeeTestRegisterResult> Register(string userId = null, string clientType = "unknown", string ipAddress = "unknown")
二次驗(yàn)證方法 Validate 參數(shù)為
•offline 是否離線驗(yàn)證(獲取驗(yàn)證參數(shù)失敗時(shí))
•UserId 用戶標(biāo)識(shí)
•Challenge
•Seccode
•Validate
Task<bool> Validate(GeetestValidateInput input)
下面打開(kāi)HomeController添加獲取驗(yàn)證參數(shù)方法,記得注入GeetestManager
private readonly GeetestManager _geetestManager;
public HomeController(GeetestManager geetestManager)
{
_geetestManager = geetestManager;
}
public async Task<GeeTestRegisterResult> GeetestRegister()
{
return await _geetestManager.Register(clientType: "web", ipAddress: "127.0.0.1");
}
下面在HomeController中加入二次驗(yàn)證
public async Task<bool> GeetestValidate(GeetestValidateInput input)
{
return await _geetestManager.Validate(input);
}
服務(wù)端部分已經(jīng)完成,下面打開(kāi)index.cshtml先引用gt.js
<script type="text/javascript" src="https://static.geetest.com/static/tools/gt.js"></script>
然后添加html元素
<h2>Getest</h2> <div id="geetestform"> <input type="hidden" name="geetest_challenge" id="geetest_challenge"> <input type="hidden" name="geetest_validate" id="geetest_validate"> <input type="hidden" name="geetest_seccode" id="geetest_seccode"> </div> <button class="form-control btn-default" id="validate">點(diǎn)我驗(yàn)證</button>
極驗(yàn)有一個(gè)初始化的過(guò)程,先調(diào)用獲取驗(yàn)證參數(shù)api進(jìn)行初始化極驗(yàn)
$(function() {
$.ajax({
url: "/home/GeetestRegister",
type: "get",
dataType: "json",
success: function(data) {
// 使用offline判斷是否是離線驗(yàn)證
offline = !data.success;
initGeetest({
// 以下配置參數(shù)來(lái)自服務(wù)端 SDK
gt: data.gt,
challenge: data.challenge,
offline: !data.success,
new_captcha: true,
product: "float",
width: "100%"
},function(){
// 初始化元素
captchaObj.appendTo(document.getElementById('geetestform'));
})
}
});
});
這時(shí)運(yùn)行項(xiàng)目已經(jīng)可以看到極驗(yàn)的驗(yàn)證表單了并且已經(jīng)可以進(jìn)行驗(yàn)證,但是還需要添加點(diǎn)擊按鈕事件進(jìn)行二次驗(yàn)證
$("#validate").click(() => {
var validate = captchaObj.getValidate();
if (validate === undefined || !validate) {
alert("請(qǐng)進(jìn)行驗(yàn)證");
return;
}
$.ajax({
url: "/home/GeetestValidate",
method:"post",
data: {
offline: offline,
challenge: validate.geetest_challenge,
validate: validate.geetest_validate,
seccode: validate.geetest_seccode
},
success: function(res) {
if (res) {
alert("二次校驗(yàn)狀態(tài)成功! 重置驗(yàn)證狀態(tài)");
captchaObj.reset();
} else {
alert("二次校驗(yàn)狀態(tài)返回失敗! 重置驗(yàn)證狀態(tài)");
captchaObj.reset();
}
}
});
});
以上所述是小編給大家介紹的在AspNetCore中使用極驗(yàn)做行為認(rèn)證的驗(yàn)證流程,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
相關(guān)文章
.net mvc頁(yè)面UI之Jquery博客日歷控件實(shí)現(xiàn)代碼
最近在做一個(gè)博客系統(tǒng),其他需要用到博客日歷控件,網(wǎng)上搜索了很多資料,其中大部分都是javascript的,經(jīng)過(guò)總結(jié)使用jquery實(shí)現(xiàn)了博客日歷效果。代碼如下2013-09-09
Asp.Net Core中服務(wù)的生命周期選項(xiàng)區(qū)別與用法詳解
這篇文章主要給大家介紹了關(guān)于Asp.Net Core中服務(wù)的生命周期選項(xiàng)區(qū)別與用法的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2018-11-11
詳解Spring Boot 中使用 Java API 調(diào)用 lucene
這篇文章主要介紹了詳解Spring Boot 中使用 Java API 調(diào)用 lucene,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-11-11
asp.net 將設(shè)有過(guò)期策略的項(xiàng)添加到緩存中
調(diào)用 Insert 方法,將絕對(duì)過(guò)期時(shí)間或彈性過(guò)期時(shí)間傳遞給該方法。2009-04-04
ASP.NET實(shí)現(xiàn)上傳圖片并生成縮略圖的方法
這篇文章主要介紹了ASP.NET實(shí)現(xiàn)上傳圖片并生成縮略圖的方法,提供了一個(gè)asp.net上傳圖片與生成縮略圖的方法,并給出了改進(jìn)程序供大家對(duì)比分析,需要的朋友可以參考下2015-12-12
從別人那拷下來(lái)的幾點(diǎn)Session使用的經(jīng)驗(yàn)
從別人那拷下來(lái)的幾點(diǎn)Session使用的經(jīng)驗(yàn)...2007-04-04
Entity Framework中執(zhí)行sql語(yǔ)句
這篇文章介紹了Entity Framework中執(zhí)行sql語(yǔ)句的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-03-03
.NET?Core使用Redis實(shí)現(xiàn)創(chuàng)建分布式鎖
分布式鎖一般用于確保在分布式系統(tǒng)中,同一時(shí)間只有一個(gè)進(jìn)程可以執(zhí)行某段代碼,本文將通過(guò).NET?Core使用Redis實(shí)現(xiàn)創(chuàng)建分布式鎖,感興趣的可以了解下2025-01-01

