怎么使用api_key 和api_secret对api进行认证呢?

xujunxing1990 发布于 2019/04/25 10:21
阅读 2K+
收藏 0

最近在作物联网,参看其他物联网平台,看到都是用api_key和api_secret对外部应用进行验证的,想知道怎么实现的

加载中
0
Joyzhou
Joyzhou

对应oauth2中的client_id,client_secret

0
前端大师傅
前端大师傅

楼上说的是签名验证。

就api_key在签名验证中的应用说详细一点:

打比方你有一个网页名为:xxx.xx/auth.jsp

1.别人用浏览器打开这个页面,也就是对auth.jsp发起了get请求。

这时你的apache会把auth.jsp和里面的js代码一起发送而在js里包含了

当时的时间戳举例:1499914521231(2017-7-13)还有api_key:927170905ECA42FC9813DD7EED21A5AF

当然这两个不会直接放在js里,而是通过md5已经计算好了生成Sign:33A62BBCEF9D4AF675ADC6BAEA468B99

然后当用户在这个auth.jsp里点了按钮时,这时会发出post请求,将Sign提交到apache

由于在get请求时已经将sign值存了一份在服务器里,这时post提交过来的sign可以与之对比,如果一致的话,就表明数据没有没篡改。存在api_key的目的是为了防止其它人非法篡改数据提交。因为此做作法想非法提交的人不知道时间戳和appkey是无法通过sign签名验证的,明白了吧,这就是appkey的作用。

而appsercet则是密钥,是可选的,即如果需要加密则用到:

你有了appid和appsercet之后,如果需要对你发送给服务端的内容加密,这时就需要将数据加密,但加密要有密钥。

即你发了一个1234,通过一个固定的方法加上你的密钥就可以混淆出密文。abcd

数据到服务端后由再由服务端的私钥,将这个密文解密还原成1234。

这样做的目的是为了防止数据在传输过程中被获取。因为就算有不法份子取到abcd由于他没有服务端的私钥是无法解开的。

明白了吧这就是appsercet的作用。

0
独孤晓林

就是两个签名字符串

OSCHINA
登录后可查看更多优质内容
返回顶部
顶部