V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
SingeeKing
V2EX  ›  问与答

可否利用 UUID 代替权限验证

  •  
  •   SingeeKing · 2018-06-01 08:40:59 +08:00 · 3347 次点击
    这是一个创建于 2367 天前的主题,其中的信息可能已经有所发展或是发生改变。

    因为 UUID 几乎是唯一的,并且因此应该是很难猜出的,因此可否使用 UUID 直接的代替权限验证?

    即:仅在获取 UUID 的时候进行权限验证,后续利用 UUID 进行操作不鉴权直接视为拥有权限?

    1. 用户抓包主动泄漏 UUID 不在风险考虑范围内
    2. 与服务器全 HTTPS 通信因此各种劫持不在风险考虑范围内
    3. 工作人员泄漏 UUID 不在考虑范围内

    请问是否有什么风险?比如说 UUID 虽然唯一但是有什么规律进行很轻松的猜测?

    18 条回复    2018-06-01 16:01:48 +08:00
    justfindu
        1
    justfindu  
       2018-06-01 08:44:45 +08:00   ❤️ 4
    what... 永久不过期么... 一朝泄露终身受用 好好好
    yylucifer
        2
    yylucifer  
       2018-06-01 08:46:10 +08:00
    如果这个 uuid 是其他用户不可见的。。

    那么我想说这不就是 token 么?
    SingeeKing
        3
    SingeeKing  
    OP
       2018-06-01 08:49:36 +08:00
    @justfindu #1 一个 UUID 所对应的对象「生命周期」 15 天左右,过了这个周期操作就没有意义了(所有操作逻辑上都是已完成不会返回任何信息也无法执行任何操作)

    @yylucifer #2 Token 是对用户唯一而这里的 UUID 是对对象唯一,多个用户可以拿到一个对象的 UUID
    justfindu
        4
    justfindu  
       2018-06-01 08:51:53 +08:00
    @SingeeKing 如果有其他相关的需要使用 UUID 关联, 一并修改么. 好好好!
    xkeyideal
        5
    xkeyideal  
       2018-06-01 08:53:12 +08:00   ❤️ 1
    什么都不考虑在范围内,那还要权限干啥
    88250
        6
    88250  
       2018-06-01 08:53:55 +08:00
    加密货币钱包就是这样的嘛。
    SingeeKing
        7
    SingeeKing  
    OP
       2018-06-01 08:55:54 +08:00
    @justfindu #4 额什么意思?我这里的 UUID 唯一的作用就是将对象获取和权限验证放在了一起。表的物理关联还是使用外键实现的(可以认为修改掉 UUID 字段不会产生任何副作用)
    justfindu
        8
    justfindu  
       2018-06-01 08:57:06 +08:00
    @SingeeKing 好 这就是 token!
    SingeeKing
        9
    SingeeKing  
    OP
       2018-06-01 08:59:39 +08:00
    @xkeyideal #5
    1 主动泄漏什么都能泄漏自然不用考虑
    2 HTTPS 通信中间人攻击和 1 一样吧,几乎防不胜防了
    3 「工作人员」很少,所有人都互相认识,并且没有泄漏的利益诉求(除非恶作剧不然送给别人别人都不会搞破坏的那种)

    主要就是想知道 UUID 如果纯猜测是有规矩可循还是如我所想的很难猜中一个(那个数学逻辑看得我头疼实在看不懂)
    xkeyideal
        10
    xkeyideal  
       2018-06-01 09:01:39 +08:00
    @SingeeKing 你的这种场景,uuid 就变成了 token,内部管理系统用用,没问题的,技术不能解决的可以用行政手段
    cout2013mr
        11
    cout2013mr  
       2018-06-01 09:08:15 +08:00
    你指的应该是 Oauth 授权吧?如果一个服务通过授权获取固定的 token,其他服务也是使用相同 token,那服务之间岂不是相当于裸奔哥的。内部系统可以这样搞,如果是对外的话,会被人玩死的吧
    misaka19000
        12
    misaka19000  
       2018-06-01 09:08:37 +08:00 via Android
    恭喜楼主重新发明了 cookie 的验证策略
    hand515
        13
    hand515  
       2018-06-01 10:13:32 +08:00
    https 就不能中间人攻击?
    liuxey
        14
    liuxey  
       2018-06-01 10:41:25 +08:00
    权限系统最主要的是分账号、角色、功能管理,全部做完整后,你的这个和 sessionid、cas 中的 token、oauth 的 token 又有啥区别的
    zjp
        15
    zjp  
       2018-06-01 10:43:41 +08:00 via Android
    别纠结 UUID 了,楼主说的就是 token,只是表示的是一个角色而不是用户。要想满足随机、唯一、不能猜测就用 snowflake
    a7a2
        16
    a7a2  
       2018-06-01 13:54:21 +08:00
    15L 说对了 便是 token 而已。而且可以加上参数一起跟 uuid hash 运算就出一个可变有控制有效期的 token 了
    hahamy
        17
    hahamy  
       2018-06-01 14:56:50 +08:00
    华夏万家 app,手机号注册后登录,只要填写手机号码就可以了,不下发验证码,不用密码,点登录后提示检测中,然后就登录上了,应该就是用的类似的原理
    当然也有可能都没用到 uuid,就是 app 生成个 token 标识
    otakustay
        18
    otakustay  
       2018-06-01 16:01:48 +08:00
    这不就是你帮用户生成密码么……
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1913 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 16:19 · PVG 00:19 · LAX 08:19 · JFK 11:19
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.