V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Apiao
V2EX  ›  程序员

关于动态鉴权 求教~

  •  
  •   Apiao · 2019-05-22 14:47:15 +08:00 · 2704 次点击
    这是一个创建于 2015 天前的主题,其中的信息可能已经有所发展或是发生改变。

    背景

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

    问题

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

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

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