登录保护check接口

2020.06.08 14:34:08
    • 接口地址:https://ac.dun.163.com/pureserver/login/check
    • 请求方法:POST
    • 接口说明:登录保护检测
    • 注意事项:建议设置http请求的超时时间,且建议http超时的情况下,认为检测结果为 “正常”。

    请求参数

    公共参数已省略,详细见:请求公共参数,其他参数如下:

    参数名称 类型 必须 最大长度 描述
    account String 256 用户唯一标识,如果是手机号or邮箱,支持传入hash值,hash算法:md5(account)
    email String 64 用户的邮箱,如果需要加密,支持传入hash值,hash算法:md5(email)
    phone String 64 默认国内手机号。如有海外手机,需包含国家地区代码,格式为”地区代码-手机号码“。如果需要加密,支持传入hash值,使用MD5算法对1开头,11位纯数字手机号进行加密后的值,32位小写,hash算法:md5(phone)
    ip String 20 用户参加活动时的ip
    registerTime Number 10 用户的注册时间,单位:秒
    registerIp String 20 用户的注册IP
    nickname String 50 用户昵称
    state int 2 登录状态,取值:1:成功,2:失败,3:锁住
    runEnv int 4 用户客户端运行环境,取值:2: WEB,3: WAP,4: IOS_PHONE,5: ANDROID_PHONE,6: WINDOWS_PHONE,7: IOS_TABLET,8: ANDROID_TABLET,9: WINDOWS_TABLET,10: WINDOWS_DESKTOP,11: MAC_DESKTOP,12: LINUX_DESKTOP
    operatingTime int 10 用户执行这次操作的时间戳,单位:秒
    sessionIdHash String 256 用户sessionId的hash值,可自定义hash算法,但请确保相同数据hash值稳定
    referrer String 200 用户http请求的Referrer头
    userAgent String 200 用户http请求的UserAgent
    xForwardFor String 200 用户http请求的X-Forwarded-For头信息,或其他记录代理信息的http头信息
    moveCount int 10 用户操作过程中的move类事件的次数,包括:mouseMove、touchMove等等
    clickCount int 10 用户操作过程中鼠标点击次数,包括:click、mousedown、touchStart等事件
    keyCount int 10 用户操作过程中键盘的摁键次数
    mac String 64 用户设备的MAC地址
    imei String 64 用户设备的移动终端设备码
    imsi String 64 用户设备的移动用户识别码
    appVersion String 32 APP版本号
    model String 32 移动设备的Model
    androidId String 32 Android设备的AndroidId
    serialNum String 64 设备的序列号
    extData json 2048 扩展字段,json格式的字符串,请与安全策略经理协商数据格式

    响应结果

    • 参数说明

    响应字段如下,通用响应字段已省略,详细参见:通用响应结果。

    参数名 类型 描述
    action int 检测结果,取值如下:0 正常,10 嫌疑,20 致命
    hitType int 命中类型,取值如下:0:正常,1:数据异常(数据完整性校验不通过或数据伪造等),2:行为异常(用户的操作行为(鼠标点击/移动等)无法通过行为验证模型等),3:环境异常(设备指纹等信息无法通过设备验证模型等),4:业务模型(撞库、批量操作、违反业务规则等),9:IP异常(终端IP画像结果为风险IP或高危IP等),10:易盾黑名单(易盾自身的黑名单数据)
    taskId string 任务id,与检测请求一一对应
    • 响应结果示例

    识别为正常的响应结果:

    {"code":200,"msg":"ok","result":{"action":0,"hitType":0,
    "taskId":"12345678900987654321123456789009"}}
    

    识别为作弊的响应结果:

    {"code":200,"msg":"ok","result":{"action":20, "hitType":3,
    "taskId":"12345678900987654321123456789000"}}
    

    示例代码

    public class LoginProtectionPureServerChecker {
    
        /** 产品密钥ID,产品标识 */
        private static final String SECRET_ID = "your secret id";
    
        /** 产品私有密钥,服务端生成签名信息使用,请严格保管,避免泄露 */
        private static final String SECRET_KEY = "your secret key";
    
        /** 业务ID,易盾根据产品业务特点分配 */
        private static final String BUSINESS_ID = "your business id";
    
        /** 易盾登录保护检测接口地址 */
        private static final String API_URL = "https://ac.dun.163yun.com/pureserver/login/check";
    
        /** 实例化HttpClient,发送http请求使用,可根据需要自行调参 */
        private static final HttpClient httpClient = HttpClient4Utils.createHttpClient(100, 20, 1000, 1000, 1000);
    
        public static void main(String[] args) throws Exception {
    
            String account = "100002";
            String email = "zhangsanzuiniu@163.com";
            String phone = "18888888888";
            String ip = "123.123.123.120";
            String registerTime = "1479178545";
            String registerIp = "123.123.123.123";
    
            Map<String, String> params = new HashMap<String, String>();
            params.put("version", "200");
            params.put("secretId", SECRET_ID);
            params.put("businessId", BUSINESS_ID);
            params.put("timestamp", System.currentTimeMillis() / 1000 + "");
            params.put("nonce", Math.random() + "");
    
            params.put("account", account);
            // 对邮箱取md5
            params.put("email", md5(email));
            // 对手机号取md5
            params.put("phone", md5(phone));
            params.put("ip", ip);
            params.put("registerTime", registerTime);
            params.put("registerIp", registerIp);
            
            // 来自web端
            params.put("runEnv", "2");
            params.put("operatingTime", System.currentTimeMillis() / 1000 + "");
    
            // 接口文档中的其他参数,建议也一并提供
    
            // 生成签名,参见签名过程的示例代码
            params.put("signature", SignatureUtils.genSignature(SECRET_KEY, params));
    
            // 发送check请求,业务方可以选择自己熟悉的工具包发送请求
            // 请特别注意,调用接口时,请设置http超时时间
            // 建议http超时的情况下,认为识别结果为“正常”
            String response = HttpClient4Utils.sendPost(httpClient, API_URL, params, Consts.UTF_8);
            try {
                // 解析响应
                JsonObject jObject = new JsonParser()
    .parse(response).getAsJsonObject();
                int code = jObject.get("code").getAsInt();
                String msg = jObject.get("msg").getAsString();
                if (code == 200) {
                    JsonObject dataObject = jObject.getAsJsonObject("result");
                    int action = dataObject.get("action").getAsInt();
                    if (action == 0) {
                        System.out.println("正常");
                    } else if (action == 10) {
                        System.out.println("嫌疑");
                    } else if (action == 20) {
                        System.out.println("致命");
                    }
                } else {
                    System.out.println(String.format("ERROR: code=%d, msg=%s", code, msg));
                }
            } catch (Exception e) {
                System.out.println("接口调用异常(超时 等),当作[正常]处理");
    
                e.printStackTrace();
            }
        }
    }
    
    在线咨询 电话咨询:95163223 免费试用