示例#1
0
        /*
         * 验证逻辑
         * 1. 组件以及极验证js的api集成在Geetest.js文件中
         * 2. 组件在页面加载时候会进行初始化,初始化过程会调用Mvc后台服务 getCaptcha(),相关授权key等配置信息初始化在工具类 GeetestLib.cs完成
         * 3. 页面图形拖拽完成后会触发mvc服务 ValidateCaptcha() 并传回初始化时候带入的验证参数, 然后通过工具类 GeetestLib.cs完成调用极验证服务器进行验证.
         * 4. 验证可以根据极验证服务器状态是否正常进行远程验证,或调用本地验证函数进行.
         * 5. 回调的授权码是一次性完成授权后失效
         */

        /// <summary>
        /// 获取验证码
        /// </summary>
        /// <returns></returns>
        public async Task <JsonResult> getCaptcha()
        {
            GeetestLib geetest = new GeetestLib(_geetestOptions, _loggerFactory);
            string     userID  = Guid.NewGuid().ToString("N");

            //初始极验证组件需调用远程服务端
            HttpContext.Session.SetString("USERID", userID);
            //验证初始化预处理  判断极验服务器是否宕机 =1正常   =0不正常
            Byte gtServerStatus = await geetest.preProcess(userID, "web");

            //返回授权结果
            var result = geetest.getResponseStr();

            return(Json(result));
        }
示例#2
0
        /// <summary>
        /// 二次进行验证码验证
        /// </summary>
        /// <param name="geetestChallenge">本次验证会话的唯一标识</param>
        /// <param name="geetestValidate">拖动完成后server端返回的验证结果标识字符串</param>
        /// <param name="geetestSeccode">验证结果的校验码,如果gt-server返回的不与这个值相等则表明验证失败</param>
        /// <returns></returns>
        public async Task <JsonResult> ValidateCaptcha([FromBody] GeetestData model)
        {
            GeetestLib geetest = new GeetestLib(_geetestOptions, _loggerFactory);
            //获取session的用户id
            string userID = HttpContext.Session.GetString("USERID");
            //验证初始化预处理  判断极验服务器是否宕机 =1正常   =0不正常
            Byte gtServerStatus = await geetest.preProcess(userID, "web");

            int result = 0;

            //如果服务器不正常,可以调用自定义的验证
            if (gtServerStatus == 1)
            {
                //二次远程api验证
                result = await geetest.enhencedValidateRequest(model.GeetestChallenge, model.GeetestValidate, model.GeetestSeccode, userID);
            }
            else
            {
                //服务器挂哒采用了默认的验证,这个验证没有实际意义需要自己添加.(仅做演示)
                result = geetest.failbackValidateRequest(model.GeetestChallenge, model.GeetestValidate, model.GeetestSeccode);
            }
            return(Json(result == 1 ? "success" : "cuowu"));
        }