登录保护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) |
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();
}
}
}
- 备注:示例代码中的HttpClient4Utils、SignatureUtils工具类参见https://github.com/yidun/login-protection-demo