API
快来分享你的内容吧~
- 2023-04-25·Java后端查看全文如何设计好比较靠谱的开放API接口 请教、讨论 看了鱼皮开放API接口项目回放第二集,看完有点茅塞顿开的感觉。以下是我的一些个人思考,欢迎大家一起讨论,看看还有什么细节漏掉了👻 思考🤔 1️⃣用户在调用我们提供的API是不是谁都能调用,并且有没有调用的限制条件...程序员鱼皮:没有绝对的安全,我们要做的是让攻击的成本(难度) > 它获取到的信息的价值(时间有效性),最后的总结是到位的 [强]1520分享
如何设计好比较靠谱的开放API接口 请教、讨论 看了鱼皮开放API接口项目回放第二集,看完有点茅塞顿开的感觉。以下是我的一些个人思考,欢迎大家一起讨论,看看还有什么细节漏掉了👻 思考🤔 1️⃣用户在调用我们提供的API是不是谁都能调用,并且有没有调用的限制条件 😶🌫️开放API接口项目,可能不是谁都能调用的,在调用我们的接口时必须是我们系统下的用户。在用户注册的时候会生成一个用户的唯一密钥accessKey和secretKey。用户每次调用需要携带该密钥 本系统的用户虽然可以调用,但是也不能让其一直调用,需要做一个限流保护 2️⃣用户携带密钥就能调用,那如果其他用户窃取了某个用户的密钥,是不是就能够再次重复调用? 😶🌫️是否可以再加上一个随机数(雪花算法来保证随机数不会重复)来判断是否是重复的调用? 但是这样会加重后端的压力,每次请求都需要保存下这个随机数,可以在加上时间戳和缓存来配合 每次请求可以先根据请求携带的时间戳来判断与当前时间是否超过五分钟,若超过则直接剔除,不需要判断随机数 如果请求的时间与系统的时间小于五分钟,则将该accesskey与随机数做一个映射关系缓存下来 3️⃣在经过上面两个思考之后,现在还有一个问题,那就是如果这个用户获取到了原来用户的请求信息,并且非常优秀的改了我们上述请求的时间戳和随机数怎么办呢? 😶🌫️这时候就要涉及到一个单向加密算法,就比如MD5加密,不可被反向解密。我们可以将之前携带的参数,密钥进行加密一起跟随请求送到我们的服务器。这时候就算黑客修改了我们的时间戳和随机数,但是黑客不知道我们的加密算法,这样使用黑客传递过来的这些参数是不能生成和服务器一样的签名的 5️⃣那如果黑客破解了我们的算法? 😶🌫️以我现在的技术也不知道该怎么办了哈哈 😊总结一下上面的点: 设计一个开放的API接口,想要做好安全性那么每次请求都需要携带以下参数: 参数1:accessKey (密钥) 参数2:param (请求参数) 参数3:nonce (随机数,雪花算法) 参数4:timestamp (时间戳) 参数5:sign (单向签名) 大家可以一起讨论一下还有没有漏洞,或者更合理的思路。 JAVA 对应密钥secretKey是否没有任何作用? JAVA #OpenAPI# #开放接口#
