用户拥有自己的后台(JAVA,GO等),前台(浏览器或APP等),用户无需自己开发验证码。
流程详解
- 作为第三方的验证码中心,需要为每一位客户提供用户id和秘钥,用户根据一定的加密原则,由客户端获取验证码图片
- 验证码中心会返回给客户端,图片下载地址,验证码等信息
- 客户端将验证码填写完毕,传给验证码中心
- 验证码中心验证成功后返回加密信息
- 客户发送登录请求前,需要将加密信息再次发到验证码中心校验(二次核验)
总结:
1. 客户端从验证码中心获取图片,验证码等信息
2. 客户端发送验证请求到验证码中心,校验成功,返还给客户端加密token
3. 服务端拿token去请求验证码中心,校验token得合法性
github地址(点击链接)
修改application.properties文件
# 服务启动端口
server.port=8085
# redis (修改为自己的redis服务器)
spring.redis.host=192.168.150.130
spring.redis.port=6379
spring.redis.database=14
spring.redis.password=
# 用户 & 秘钥
captcha.clients[tbc]=abcdefg
发送请求:GET请求
参数 | 描述 | 是否必填 |
---|---|---|
clientId | 用户名,配置文件中的clients ,例如:tbc | 是 |
randomStr | 随机数(保证一分钟内不重复)例如:123 | 是 |
token | SHA256加密(security + randomStr),例如:SHA256(abcdefg + 123) ,没有“+”号 | 是 |
width | 生成图片的宽度,限制:260-400,默认:300 | 否 |
height | 生成图片的高度,限制:100-300,默认:150 | 否 |
length | 生成验证码的个数,即图片中包含几个文字,默认为:5,最大限制为8 | 否 |
interfereCount | 虚假字符个数,默认为:0 | 否 |
注意:
length = 5 & interfereCount = 2
生成的图片中有5个文字,虚假字符个数为2,只有3个文字的位置是需要验证的
请求路径
http://127.0.0.1:8085/code/click?
clientId=tbc& // 用户名
randomStr=123& // 随机数
interfereCount=2& // 虚假字符个数
token=200f5183a8d9ef5339eaf6e3987d892e8751036beaa158257c1b65d78e3fa0f2 // 摘要加密SHA256(abcdefg + 123)
返回样例
{
"status": 1,
"message": "成功!",
"data": {
"code": "惠伪别", // 要依次点击的文字(因为虚假字符为2,只需要点击这三个字的位置即可)
"url": "temp/2019-03-12/e82c2d3a-9ac5-40cb-90cd-4378b57d0c16.jpg" // 下载的相对地址(图片中包含5个文字)
}
}
发送请求:POST请求
参数 | 描述 | 是否必填 |
---|---|---|
clientId | 用户名,配置文件中的clients ,例如:tbc | 是 |
randomStr | 与第一步中的随机数保持一致,例如:123 | 是 |
token | SHA256加密(security + randomStr),例如:SHA256(abcdefg + 123) ,没有“+”号 | 是 |
width | 使用时图片的宽度,限制:260-400,默认:300 | 否 |
height | 使用时图片的高度,限制:100-300,默认:150 | 否 |
注意:
width= 300 & height= 150
第一步生成图片的时候已经指定了图片的大小,但是在使用过程中,图片可以通过css动态调整宽,高
这两个参数为调整后的图片宽,高
请求路径
http://127.0.0.1:8085/code/click?
clientId=tbc& // 用户名
randomStr=123& // 随机数
token=200f5183a8d9ef5339eaf6e3987d892e8751036beaa158257c1b65d78e3fa0f2 &// 摘要加密SHA256(abcdefg + 123)
width=300 &// 宽度
height=150 // 宽度
请求体
[
// 依次点击的位置,横纵坐标
[
89.56606105408488,
131.01752929343525
],
[
215.6328867291958,
96.6122642706682
],
[
270.23317983101146,
84.86074188057876
]
]
返回样例
{
"status": 1,
"message": "成功!",
"data": "ajsdkljiasgkekljfklasjdiopufipaosd" // 在第三步中需要使用
}
注意:对于安全要求不高的,第三步可以省略,无需服务端校验
发送请求:GET请求
参数 | 描述 | 是否必填 |
---|---|---|
clientId | 用户名,配置文件中的clients ,例如:tbc | 是 |
randomStr | 与第一步中的随机数保持一致,例如:123 | 是 |
token | SHA256加密(security + randomStr),例如:SHA256(abcdefg + 123) ,没有“+”号 | 是 |
confirm | 第二步中返回的数据data,例如:ajsdkljiasgkekljfklasjdiopufipaosd | 是 |
请求路径
http://127.0.0.1:8085/code/click/confirm?
clientId=tbc& // 用户名
randomStr=123& // 随机数
token=200f5183a8d9ef5339eaf6e3987d892e8751036beaa158257c1b65d78e3fa0f2 // 摘要加密SHA256(abcdefg + 123)
confirm=ajsdkljiasgkekljfklasjdiopufipaosd // 第二步中返回的数据data
返回样例
{
"status": 1,
"message": "成功!",
"data": "校验成功"
}
网易易顿
github源码
国家标识顶级节点
有志之士可加微信共同讨论:17702201250