目录

v5行为验证使用介绍(一)- 试探攻击的威胁
v5行为验证使用介绍(二)- 应用管理
v5行为验证使用介绍(三)- 程序接入流程
v5行为验证使用介绍(四)- Verify5Client.java

接入流程

V5验证码前后端对接流程如下图所示:

对接V5验证码分为业务网站后台api对接以及业务前端代码引入两部分。

业务网站后台

获取验证Token及验证服务器(getToken)

用于网站后台定时通过V5控制台刷新获取验证所需要的Token及验证服务器地址。Token有效期为24小时。
请求方式:GET
调用示例:

curl -X GET 'https://www.verify5.com/openapi/getToken?appid=dff58e0476e34b5899d4027733f8c14b&timestamp=1564220208945&signature=6c8e8e38d11dddb08d5b5a8fc750db68'

Request入参说明:

参数名 说明 示例
appid 当前网站应用对应的App Id dff58e0476e34b5899d4027733f8c14b
timestamp 当前提交时的Unix时间戳,即北京时间1970-1-1 0:0:0到现在经过的毫秒数 1564220208945
signature 当前提交时的签名。详细见签名规则 6c8e8e38d11dddb08d5b5a8fc750db68

Response返回格式:

{"success": true,  //请求是否成功标识"data": {              //请求返回的消息体,详细以下列表说明"expiresIn": "86400000","token": "e3e3d5d1aa4445e9bdde0bdb7eac37d6"}
}

返回参数说明:

参数名 说明 示例
token 返回当前有效的token e3e3d5d1aa4445e9bdde0bdb7eac37d6
expiresIn token有效时长单位毫秒 86400000

获取验证结果(verify)
在前端完成验证后,业务网站后台向V5验证服务器调用接口获取验证结果。验证结果最长保留5分钟,在业务网站后台成功获取结果后立即删除。
请求方式:GET
调用示例:

curl -X GET 'https://{host}/openapi/verify?&verifyid=ee92ede662aa43c3a68c2a369fa19c70&token=644112d89ac54bac97cee06d42e2137c&timestamp=1564220208945&signature=6c8e8e38d11dddb08d5b5a8fc750db68

Request入参说明:

参数名 说明 示例
host 验证节点域名 xxxx.verify5.com
verifyid 前端验证时返回的票据,由前端验证后返回 ee92ede662aa43c3a68c2a369fa19c70
token 当前有效的token 644112d89ac54bac97cee06d42e2137c
timestamp 当前提交时的Unix时间戳,即北京时间1970-1-1 0:0:0到现在经过的毫秒数 1564220208945
signature 当前提交时的签名。详细见签名规则 注:host不参与签名 6c8e8e38d11dddb08d5b5a8fc750db68

Response返回格式:

{"success": true,  //请求是否成功或失败标识,true/false
}

前端

Web前端
1. 引入JS
在需要进行V5验证的页面,引入v5.js:

<script src="https://s.verify5.com/assets/latest/v5.js" type="text/javascript"></script>

2. 样式表
默认情况下,v5.js会检测当前页面环境并自动植入v5.css,开发者也可手动在页面植入css代码样式表:

<link rel="stylesheet" href="https://s.verify5.com/assets/latest/css/v5.css" type="text/css" />

3. JS API校验

<script>var v5=new com.strato.Verify5({host:"Host",//从后台getToken接口获得token:"(Token)"//从后台getToken接口获得};v5.on("CANCEL",function(){//当用户取消验证时触发});v5.verify(function(result){var success=result.success;if(success){var verifyId=result.verifyId;//TODO 将verifyId提交到应用服务器请求二次验证}});
<script>

4. Data API校验
V5支持通过自定义属性v5-config自动初始化UI控件。语法为:

<div v5-config="{ name:'v5', host:'(Host)', token:'(Token)' }" ></div>

v5.js会在页面加载完成后自动生成验证按钮组件,如下图效果:



在线演示

当用户点击按钮并验证通过时,会自动在div内生成hidden input:

<input id="v5container" type="hidden" name="{name}" value="{verifyId}" />

其中,{name}为v5-config中传入的name(示例中为 “v5” ),{verifyId}为控件自动生成的唯一通过码,该字段需同业务表单一起提交至后台,并提交到验证服务器进行二次验证。

签名规则

签名生成方法如下:

  • 对所有请求参数(包括公有参数和私有参数,但不包括 signature 参数),按照参数名ASCII码表升序顺序排序。如:foo=1f, bar=2B, foo_bar=3FB, baz=4baz 排序后的顺序是 bar=2B, baz=4baz, foo=1f, foobar=3FB。

  • 将排序好的参数名和参数值构造成字符串,格式为:key1value1key2value2… 。根据上面的示例得到的构造结果为:bar2Bbaz4bazfoo1ffoobar3FB 。

  • 选择与 appid 配对的 appkey ,加到上一步构造好的参数字符串之后,如 app=6308afb129ea00301bd7c79621d07591 ,则最后的参数字符串为:bar2Bbaz4bazfoo1ffoobar3FB6308afb129ea00301bd7c79621d07591。

  • 把第3步拼装好的字符串采用 utf-8 编码,使用 MD5 算法对字符串进行摘要,计算得到 signature 参数值,将其加入到接口请求参数中即可。MD5 是128位长度的摘要算法,用16进制表示,一个十六进制的字符能表示4个位,所以签名后的字符串长度固定为32位十六进制字符(小写)。

签名生成示例代码(java):

/**
* 生成签名信息
* @paramappKey产品私钥
* @param params 接口请求参数名和参数值map,不包括signature参数名
* @return
*/
public static String genSignature(String appKey, Map params){// 1. 参数名按照ASCII码表升序排序String[] keys = params.keySet().toArray(new String[0]);Arrays.sort(keys);// 2. 按照排序拼接参数名与参数值StringBuilder sb = newStringBuilder();for (String key : keys) {sb.append(key).append(params.get(key));}// 3. 将secretKey拼接到最后sb.append(appKey);// 4. MD5是128位长度的摘要算法,转换为十六进制之后长度为32字符return DigestUtils.md5Hex(sb.toString().getBytes("UTF-8"));
}

签名算法说简单也简单,说复杂也复杂,笔者封装了一个访问v5服务端的Java客户端,使用Java开发的同学可以到这里直接下载使用。
更详细的接口和方法列表可以参看官网文档。

v5行为验证使用介绍(三)- 程序接入流程相关推荐

  1. 微信支持环信_环信客户互动云v5.39已发布:支持微信小程序接入

    环信客户互动云v5.39_产品更新说明 发布日期:2018-11-06 客服模式 质检中新增会话ID字段 质检中新增会话ID字段,与历史会话中的会话ID对应,支持根据会话ID搜索质检会话,以及在质检详 ...

  2. 微信小程序接入微信支付(三):小程序端调用支付接口

    微信小程序调用支付接口官方文档:https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=7_7&index=5 在上一节中 ...

  3. 形式化验证工具TLA+:程序员视角的入门之道

    简介: 女娲是飞天分布式系统中提供分布式协同的基础服务,支撑着阿里云的计算.网络.存储等几乎所有云产品.在女娲分布式协同服务中,一致性引擎是核心基础模块,支持了Paxos,Raft,EPaxos等多种 ...

  4. 小程序接入h5页面_原生小程序接入H5页面,请求后台接口,获取数据

    项目开发中赶上三端接入h5的需求,因此本身动手作h5页面,可是在作的过程当中也赶上了许多的问题javascript 小程序端不支持在本地引入,因此须要将h5发布服务器,以请求接口的形式进行访问html ...

  5. {Django基础九之中间件} 一 前戏 二 中间件介绍 三 自定义中间件 四 中间件的执行流程 五 中间件版登陆认证...

    Django基础九之中间件 本节目录 一 前戏 二 中间件介绍 三 自定义中间件 四 中间件的执行流程 五 中间件版登陆认证 六 xxx 七 xxx 八 xxx 一 前戏 我们在前面的课程中已经学会了 ...

  6. 百度小程序接入搜索结果-标准化服务SPU指导手册

    概述 当您在百度小程序开发平台完成某款小程序的开发,并成功发布之后,却苦于不知如何寻求更多的曝光展示机会,获得更多的精准流量呢?那么这篇文章将告诉您如何将您开发的优质小程序接入百度搜索获取特型卡片展示 ...

  7. 微信小程序接入微信支付(二):后台调用统一下单接口

    微信统一支付官方文档:https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=9_1 因该接口需要商户系统中自己的订单编号,笔者先 ...

  8. 微信小程序--sha1加密元素以字典顺序排序微信小程序接入微信公众平台

    java--sha1加密 算法实现 bytes[i] & 0xFF 原理详解 以字典顺序排序 php----$_GET[] http认证中的nonce与timestamp token和nonc ...

  9. 两台服务器身份验证,详解三种不同的身份验证协议

    本文最初发布于devever.net网站,经原作者授权由InfoQ中文站翻译并分享. 现在,身份验证协议的数量快赶上应用程序协议,结果,这个领域很容易让人困惑. 最容易把人搞糊涂的是,很少有人注意到这 ...

最新文章

  1. Leetcode 141. 环形链表 解题思路及C++实现
  2. PowerShell删除Exchange 2010邮件的正确姿势
  3. 蓝桥备赛第三周 倍增+贪心+素数+约数
  4. 拿访问网站用户IP 纯JS实现
  5. Matlab 使用GPU加速 转载
  6. 詹森不等式_注意詹森差距
  7. 六安市事业单位计算机基础知识,最全的事业单位考试计算机基础知识试题[1] 2...
  8. 敏捷开发一千零一问系列之十七:长期受制于强势客户怎么办?(上)
  9. 火星人敏捷开发手册 2011-10-14 发布
  10. 云服务器工具大全,云服务器主要的登陆方法有哪些
  11. HTML DOM学习
  12. 直流电机控制原理与TB6612FNG(初识编码器)
  13. OUTLOOK 下邮件如何以人,文件夹来分类inbox
  14. flutter BoxDecoration设置背景 image 报错:type ‘Image‘ is not a subtype of type ‘ImageProvider<Object> 解决方法
  15. U8C报表模板已设置,任务已分配仍无法查看报表数据
  16. 错误 C1189 #error MFC does not support WINVER less than 0x0501.
  17. 7、HTML超链接标签,a标签,锚链接,QQ推广
  18. R语言基于mediation包行中介效应分析(2)
  19. 【C/C++】多维向量vector
  20. shell-定时备份数据库发送至邮箱

热门文章

  1. 有关数据包拓展基础知识
  2. Multi-armed Bandit Experiments
  3. c++/c/java 资源共享群
  4. jsPlumb流程图完整实例
  5. 自制F1C200S demo板(六、裸机寄存器点灯)
  6. linux多个文件删除重复行,shell中删除文件中重复行的方法
  7. Mysql报文理解mtu拆包依据(tso/gro)
  8. 微博爬虫及舆情分析-1.爬取微博数据
  9. 大数据精细化运营产品解决方案
  10. 【计组】主存储器有关知识梳理