V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
WriteJob
V2EX  ›  程序员

请教:如何维持 APP 的长期 token 动态更新的问题?

  •  
  •   WriteJob · 2017-09-16 11:41:32 +08:00 · 15254 次点击
    这是一个创建于 2654 天前的主题,其中的信息可能已经有所发展或是发生改变。

    网上搜索找到一个方法:即在第一次用账号密码登录服务器会返回两个 token时效长短不一样。短的时效过了之后,发送时效长的 token 重新获取一个短时效,如果都过期,就需要重新登录了。

    1. 这两个时效分别设置在多久比较合适?

    2. 是否有更理想的解决方案?

    15 条回复    2018-06-19 17:35:15 +08:00
    imherer
        1
    imherer  
       2017-09-16 11:45:53 +08:00
    参考微信的吧,就是这样设计的。 微信的长 token 是一个月,短的好像是 2 小时。
    mengskysama
        2
    mengskysama  
       2017-09-16 12:47:25 +08:00 via iPhone
    参考 oauth2 文档
    wlee1991
        3
    wlee1991  
       2017-09-16 12:56:54 +08:00
    加一个 flag
    pynix
        4
    pynix  
       2017-09-16 14:26:56 +08:00
    oauth
    pynix
        5
    pynix  
       2017-09-16 14:28:30 +08:00
    普通自家 app 不用考虑客户端过期,过期主要是针对把资源提供给别人用的场景。
    abcbuzhiming
        6
    abcbuzhiming  
       2017-09-16 15:24:43 +08:00
    楼主你这个方案完全不合理,为什么不能直接用哪个长期的 token 呢?怕被人窃取导致安全问题?
    guyskk
        7
    guyskk  
       2017-09-16 15:52:23 +08:00 via Android
    @abcbuzhiming
    oauth2 就是两个 token,我也想知道为啥这样设计~
    zjp
        8
    zjp  
       2017-09-16 17:34:04 +08:00   ❤️ 1
    两个 Token 只给自己增加了复杂度。一个过期的 Token 只能换取一个新的 Token 的方式可能更好
    http://www.jianshu.com/p/b4cf771e570e
    lianyue
        9
    lianyue  
       2017-09-16 17:39:15 +08:00
    30 天有效期 低于 20 天自动续期到 30 天就好了呀 超过 30 天不访问 就需要重新登录
    lslqtz
        10
    lslqtz  
       2017-09-16 18:04:15 +08:00
    过期后自动获取新 token,用另外一个 token 去获取干嘛。。
    workwonder
        11
    workwonder  
       2017-09-16 18:13:51 +08:00 via Android
    我也是实现成自动续期了。实际的有效期比较短,但是服务器每次见到 token 发来,都会自动续满。

    不知这样安全性如何?
    Cabana
        12
    Cabana  
       2017-09-16 21:26:00 +08:00 via Android
    @guyskk
    @zjp
    短的是 Access Token
    长的是 RefreshToken
    他们两个的作用是不一样的,建议去看下 Oauth
    kalman03
        13
    kalman03  
       2017-09-16 22:39:19 +08:00   ❤️ 2
    每次打开 APP,用客户端中已存在的 token,访问服务端刷新 token。逻辑为:

    若客户端 token 不存在,表示未登录。
    若客户端用旧的 token 刷新请求,服务端告知 token 失效( token 获取不到对应用户信息),则表示需要重新登录。
    若客户端用旧的 token 刷新请求,服务端正常响应,则用获取到的新 token 替换掉该老 token。

    如此,只要用户在 token 的有效期内访问 app,则用户长期无需登录。
    WriteJob
        14
    WriteJob  
    OP
       2017-09-17 08:23:40 +08:00
    @zjp 学习了,文章里分析的很透彻
    g29times
        15
    g29times  
       2018-06-19 17:35:15 +08:00
    @zjp 不错
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2461 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 04:55 · PVG 12:55 · LAX 20:55 · JFK 23:55
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.