关于动态鉴权 求教~ - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不在回答技术问题时复制粘贴 AI 生成的内容
Apiao
V2EX    程序员

关于动态鉴权 求教~

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

    背景

    有一个对外的 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     Solana     1105 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 105ms UTC 18:12 PVG 02:12 LAX 10:12 JFK 13:12
    Do have faith in what you're doing.
    (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) })(window,document,'script','//www.google-analytics.com/analytics.js','ga'); ga('create', 'UA-11940834-2', 'v2ex.com'); ga('send', 'pageview'); ga('send', 'event', 'Node', 'topic', 'programmer'); ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86