如何保证开放平台Api的安全性?
发布于 7 年前 作者 linkenliu 3732 次浏览 来自 问答

如何保证开放平台Api的安全性? APP与server之间的通讯

6 回复

参考支付宝网关的相关接口,用户需要在本地生成一对密钥,把开发者公钥告诉支付宝,开发者私钥自己保管,同时支付宝也会把支付宝公钥告诉开发者,支付宝私钥支付宝自己保管。

然后就是交互过程了,app端用开发者私钥对数据进行SHA-128或SHA-256签名,这些数据就是要传给支付宝的数据(数据中一般包含一个APPID表示开发者身份),一般会按照字母序正序排序一次,然后进行刚才所说的签名过程。

这些数据到了支付宝后,支付宝拿开发者公钥验证这个签名,如果验签成功,说明是这个开发者没错,否则拒绝这个请求。其他第三方平台的API权限验证大同小异。

总结一下就是,私钥签名,公钥验签。

@nullcc 多谢,明白了,开发者需把公钥告诉平台,开发者用私钥签的名对应的公钥能够解开。 但是这样的话通过抓包得到一个完整的地址别人还是能够成功请求。

@linkenliu 有一个地方需要注意的就是,SHA-256属于散列算法,像AES-128这种属于加密算法。 散列算法和加密算法的不同点在于用途不一样,散列算法在这里是拿来做数据验证的,常见的如MD5这种信息摘要算法,主要是用来保证数据不被篡改。基本上可以认为是不可逆的一种算法。 加密算法则用来对数据进行加密运算,一般是可逆的。所以上面说的SHA-256是拿来保证数据不被篡改的,不能从中解密出什么信息。

@linkenliu 说到拦截和伪造请求的问题,如果有人通过抓包拦截你的请求再转发,这是没问题的,因为你的请求是有效的。但是伪造就比较难了,除非中间人拿到你的私钥重新构造请求并签名。

@nullcc 伪造的话可能性不大,除非私钥被泄露了。通过抓包拦截你的请求再转发,想过用时间戳,若是前后超过1分钟视为无效请求,但是感觉还是不太好。

@linkenliu 时间戳只能让某个特定请求在一段时间内有效,不过这取决于对方平台怎么做,平台可以选择完全忽视时间戳。不过只要私钥不泄漏,一般没事。

回到顶部