关于动态鉴权 求教~

2019-05-22 14:47:15 +08:00
 Apiao

背景

有一个对外的 API 接口,目前鉴权的解决方案是分发给用户一个 key,并通过一系列的加密手段完成鉴权,请求调用成功会返回一个可以直接访问收费资源的 url

问题

如果别人劫持了用户的一次请求,得到了通过鉴权后的 url,那么劫持者就可以在有效期内无数次使用这个 URL

求解有没有比较好的解决方案,主要的目标是 1.解决上述问题 2.平滑升级(不影响旧用户的情况下,新用户启用新鉴权)

2535 次点击
所在节点    程序员
19 条回复
Apiao
2019-05-22 14:47:31 +08:00
# 抛砖引玉
目前我的一个想法是加入 IP 校验,即服务端鉴权时检验该 IP 是否为发起请求时的 IP,不是则拒绝,这个方案的优点是可以平滑升级,缺点是无法保证每次都能拿到用户的真实 IP,有误杀的风险(虽然我感觉风险挺低的。。)
问该方案是否还有其他弊端?
raptor
2019-05-22 14:53:46 +08:00
不能直接在收费 URL 里鉴权?绑定 IP 当然是一个方法,还有就是限制请求次数,超过需要重新鉴权。
Takamine
2019-05-22 14:57:21 +08:00
我手机没流量了,把你手机开热点给我连一下:doge:。
hakono
2019-05-22 15:00:47 +08:00
收费资源 url 也鉴权嘛,如果不鉴权的话不用劫持流量,用户自己获取到了收费 url 后把 url 往网上一发,一样都是所有人都能艹你资源
lihongjie0209
2019-05-22 15:00:50 +08:00
为什么不直接在收费的 URL 做 3A?
Apiao
2019-05-22 15:01:41 +08:00
@raptor 其实收费的 url 里是有鉴权的,但这些信息都已经包含在先前返回的 url 里了,如果劫持者拿到这个 url 就可以直接访问
Apiao
2019-05-22 15:07:03 +08:00
@lihongjie0209 3A 具体是指?
Apiao
2019-05-22 15:08:50 +08:00
@hakono 对,其实就是只要有了后面的链接谁都能访问,因为所有校验信息都包含在 url 里了,这个要再重新做鉴权该如何操作呢?让用户加新的 key 吗?
smdbh
2019-05-22 15:11:30 +08:00
https?
theTd
2019-05-22 15:19:26 +08:00
https
swulling
2019-05-22 15:20:48 +08:00
防攻击用 https 就最简单了,兼容就同时允许 HTTP 和 https
swulling
2019-05-22 15:21:02 +08:00
@swulling 防中间人攻击
AlexaZhou
2019-05-22 15:22:29 +08:00
把通过过鉴权后的 url 关联到用户,对不同的用户返回不一样的资源 url,这样就可以计费到用户了
ihciah
2019-05-22 16:14:22 +08:00
问题场景倒是挺常见的,比如百度盘。。
client 在使用完链接后主动请求 disable 这个资源?
micean
2019-05-22 16:22:43 +08:00
服务端识别不了中间人攻击吧
什么样的资源?最好是自己做客户端
hakono
2019-05-22 16:54:39 +08:00
@Apiao 做 cookie 认证啊。你的 api 总不会不需要用户登录就能直接获取下载 url 吧。
对下载 url 也做一个同样的登陆认证就行了。
jjianwen68
2019-05-22 17:04:03 +08:00
不同的用户应该生成不同的 url,生成的 url 有访问频率限制和有效期,这样是不是够
wisej
2019-05-22 17:14:58 +08:00
@jjianwen68 赞同,资源 url 带有已鉴权的身份信息(比如对 uuid 进行对称加密)。其他人访问的时候就可以后端解密,对 url 里的 uuid 和访问这个 url 用户 uuid 进行一个比较
danmu17
2019-05-23 01:44:48 +08:00
典型的思路不清晰,也不去读业内规范。
好奇是不是国内绝大多数的程序员都是这样的?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/566566

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX