• 请不要在回答技术问题时复制粘贴 AI 生成的内容
Apiao
V2EX  ›  程序员

关于动态鉴权 求教~

  •  
  •   Apiao · May 22, 2019 · 3427 views
    This topic created in 2562 days ago, the information mentioned may be changed or developed.

    背景

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

    问题

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

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

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