登录保护check接口

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

请求参数

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

参数名称类型必须最大长度描述
accountString256用户唯一标识,如果是手机号or邮箱,支持传入hash值,hash算法:md5(account)
emailString64用户的邮箱,如果需要加密,支持传入hash值,hash算法:md5(email)
phoneString64默认国内手机号。如有海外手机,需包含国家地区代码,格式为”地区代码-手机号码“。如果需要加密,支持传入hash值,使用MD5算法对1开头,11位纯数字手机号进行加密后的值,32位小写,hash算法:md5(phone)
ipString20用户参加活动时的ip
registerTimeNumber10用户的注册时间,单位:秒
registerIpString20用户的注册IP
nicknameString50用户昵称
stateint2登录状态,取值:1:成功,2:失败,3:锁住
runEnvint4用户客户端运行环境,取值: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
operatingTimeint10用户执行这次操作的时间戳,单位:秒
sessionIdHashString256用户sessionId的hash值,可自定义hash算法,但请确保相同数据hash值稳定
referrerString200用户http请求的Referrer头
userAgentString200用户http请求的UserAgent
xForwardForString200用户http请求的X-Forwarded-For头信息,或其他记录代理信息的http头信息
moveCountint10用户操作过程中的move类事件的次数,包括:mouseMove、touchMove等等
clickCountint10用户操作过程中鼠标点击次数,包括:click、mousedown、touchStart等事件
keyCountint10用户操作过程中键盘的摁键次数
macString64用户设备的MAC地址
imeiString64用户设备的移动终端设备码
imsiString64用户设备的移动用户识别码
appVersionString32APP版本号
modelString32移动设备的Model
androidIdString32Android设备的AndroidId
serialNumString64设备的序列号
extDatajson2048扩展字段,json格式的字符串,请与安全策略经理协商数据格式

响应结果

  • 参数说明

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

参数名类型描述
actionint检测结果,取值如下:0 正常,10 嫌疑,20 致命
hitTypeint命中类型,取值如下:0:正常,1:数据异常(数据完整性校验不通过或数据伪造等),2:行为异常(用户的操作行为(鼠标点击/移动等)无法通过行为验证模型等),3:环境异常(设备指纹等信息无法通过设备验证模型等),4:业务模型(撞库、批量操作、违反业务规则等)
taskIdstring任务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();
        }
    }
}
Online Chat Tel:95163223