调用流程
调用流程上图为官方提供的调用流程图,服务端只需关心红框中的内容:
- 客户端验证通过后获取到验证参数
- 将验证参数传到服务端进行验签
接入
服务端接入
服务端接入可参考官方文档:https://help.aliyun.com/document_detail/66341.html?spm=a2c4g.11186623.6.574.4a11169bnSpGO7
若使用 Java、.NET、PHP、Python等语言,可以使用官方提供的服务端SDK进行接入。若是其他语言(比如NodeJS),则只能通过调用官方API的形式。需要指出的是,官方的API文档并不准确。例如,人机验证的HOST地址文档中为 http://jaq.aliyuncs.com/
,实际应为 http://afs.aliyuncs.com
。公共参数中API版本号文档中为 2016-11-23
,实际应为 2018-01-12
。
若在接入的过程中,遇到困难,尽早提工单联系阿里云的专员解决。上述,提到的文档问题,已经向阿里云的专员反馈,但是文档还没有改正过来。大家可以参看我的代码实现接入。
阿里云的API和腾讯云的API类似,都是由公共参数与业务参数组成。为了避免自己拼装路由出现错误,使用了官方包 @alicloud/pop-core
,完成这些接口参数的生成与拼接。服务端主要代码如下:
// https://github.com/youthcity/graph-captcha/blob/master/src/ali_afs/client.ts
constructor(config:Config) {
this.access_key_id = config.access_key_id;
this.access_key_secret = config.access_key_secret;
this.client = new RPCClient({
accessKeyId: this.access_key_id,
accessKeySecret: this.access_key_secret,
endpoint: 'http://afs.aliyuncs.com',
apiVersion: '2018-01-12',
codes: [100, 900],
})
}
public async verify(params:VerifyParams) : Promise<boolean> {
const ACTION_TYPE = 'AuthenticateSig';
let is_pass = false;
try {
const res = await this.client.request(ACTION_TYPE, params);
if (res && res.Code == AFSCode.PASS) {
is_pass = true;
}
} catch (error) {
console.log(error);
}
return is_pass;
}
客户端接入
Step 1 阿里云数据风控控制台,申请应用
路径:人机验证 —— 新增配置
配置应用经过与阿里云的专员确认,表单中 高峰期PV
字段可以随意填写,并不会影响验证服务使用。我们需要根据自己的应用类型、验证方式进行填写。客户端接入是与这些配置强关联。(因为这个原因,我们最后放弃了阿里云盾作为验证码服务。客户端接入成本过高)
Step 2 应用代码接入
申请完配置后,我们就可以看到客户端接入的代码了。阿里云会根据申请的配置动态生成客户端接入代码。我们按照提示,复制粘贴代码到自己的项目里就可以完成接入了。
应用代码优缺点分析
缺点
-
客户端接入成本高。以安卓/IOS端为例,每一次发布移动端应用,需要将应用上传到阿里云上,获取对应的安全SDK。
安卓接入 -
配置过多,不便于管理。对于不同类型的应用、验证方式需要单独申请配置,且需要单独接入。若客户端更改验证方式后,需要单独申请配置和重新接入。
-
文档不准确。文档中,除了部分参数不正确外,最严重的错误是服务端API地址是错误的。
优点
-
客服响应及时。提交工单可以快速相应,联系专员可以迅速解决问题。
-
文档略好于腾讯云。
-
资费便宜。
总结
与极验等其他家验证码服务厂商相比,阿里云盾并不能算上一个合格的商用验证码服务。阿里云盾的客户端接入方式较为复杂且客户端接入成本过高。文档有些许错误且不全。因此,不推荐大家在生产环境中使用。
网友评论