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

求一个 api 接口 token 设计的规范流程呀!

  •  
  •   qwertyzzz ·
    123 · 2019-07-04 16:50:15 +08:00 · 5394 次点击
    这是一个创建于 1841 天前的主题,其中的信息可能已经有所发展或是发生改变。

    之前写接口直接登录后 userid 存在客户端然后调用的。。方便是方便 感觉好不规范。。搜了下 token 什么的发现好多不同的。 1.登录后返回个 token token 和 token 过期时间存在用户表里 然后每次请求带 token 新增下 token 过期时间;过期了就返回登录界面

    2.有 refresh_token 的这个和 1 好像类似 只是过期跳转到登录估计是按 refresh_token 过期来算,token 过期用 refresh_token 去刷新 然后重新存?

    3.另外有的有什么 appid 和 secret 是什么鬼。。参考微信的吗 但是我给一个 app 单独写接口应该不需要这个吧

    第二部刷新那个客户端写起来会不会很复杂啊 如果有异步请求什么的。然后我想知道用 userid 去获取数据和用 token 去获取数据的不同处。还有 token 存服务端的话如果不放在 user 表里 是不是存缓存也要加个 user 的什么信息让他变成唯一 key 好取啊。。比如 userid+字符串 token.其他不知道还有什么流程 想知道各位都采用什么流程啊 有图最好了 0 0

    写的比较乱 这 2 天的暂时疑问。不知道现在有什么简单的稍微规范的流程 也不一定要完全安全,,至少稍微安全点吧。,。

    20 条回复    2019-07-04 23:14:17 +08:00
    Destiny97
        1
    Destiny97  
       2019-07-04 17:05:56 +08:00 via Android
    第二个是 jwt ?第二个是 oauth?
    Destiny97
        2
    Destiny97  
       2019-07-04 17:06:24 +08:00 via Android
    第二个是 oauth->第三个是 oauth
    JimmyTinsley
        3
    JimmyTinsley  
       2019-07-04 17:07:36 +08:00
    我们公司之前用的应该是你说的第二种. 按照有效期长短分两种 token, 短效 token 有效期 15 分钟, 长效 token 有效期 30 天(作用相当于 cookie). 客户端每 14 分钟通过接口, 用长效 token 更新短效 token, 其他需要 token 认证的接口统一使用短效的 token. token 的实现方式是 JWT. 机制大概是这样, 仅供参考~
    baiyi
        4
    baiyi  
       2019-07-04 17:28:15 +08:00
    qwertyzzz
        5
    qwertyzzz  
    OP
       2019-07-04 17:58:27 +08:00
    @Destiny97 不懂啊。。想知道现在普遍用什么呀 最好不要太复杂了
    qwertyzzz
        6
    qwertyzzz  
    OP
       2019-07-04 17:59:07 +08:00
    @liujie333333 那客户端不是还要定时?
    pyy910716
        7
    pyy910716  
       2019-07-04 18:03:46 +08:00 via iPhone
    123
    qwertyzzz
        8
    qwertyzzz  
    OP
       2019-07-04 18:19:58 +08:00
    @pyy910716 啊?
    qwertyzzz
        9
    qwertyzzz  
    OP
       2019-07-04 18:20:19 +08:00
    @baiyi 好长。。有没有简单的图呢那种流程啊
    luozic
        10
    luozic  
       2019-07-04 18:21:27 +08:00
    soulzz
        11
    soulzz  
       2019-07-04 18:47:47 +08:00
    参考同事的代码 :写一个生成 token 的方法(不对外公开),第一次调用时需要传参 secret 与 appid,对 secret 进行单向加密后存数据库,生成 uuid token 返回。做一个切点,api 请求校验 token,通过就继续执行,不通过就拦截。提供 refresh token 和 get token 方法,均需要提供 secret
    soulzz
        12
    soulzz  
       2019-07-04 18:50:48 +08:00
    uuid 生成的 token 存 redis 设置过期时间
    qwertyzzz
        13
    qwertyzzz  
    OP
       2019-07-04 19:27:40 +08:00
    @luozic 大哥好长看不下去 TOT
    qwertyzzz
        14
    qwertyzzz  
    OP
       2019-07-04 19:28:34 +08:00
    @soulzz appid 和 secret 哪来的呀 能说下具体从登录开始到请求一个需要 token 的接口的流程吗。。
    soulzz
        15
    soulzz  
       2019-07-04 19:37:07 +08:00
    @qwertyzzz appid 和 secret 是你自己定义的 例如每个版本的客户端你可以定义一个 appid 和对应的 secret
    Destiny97
        16
    Destiny97  
       2019-07-04 20:50:01 +08:00 via Android
    @qwertyzzz 我也不是很懂具体怎么用,只是在自己毕设里用过 jwt,然后了解过 oauth,这些都有应用场景,可以去以这几个为关键词搜索下具体怎么应用
    CRUD
        17
    CRUD  
       2019-07-04 21:03:21 +08:00
    JWT 和 OAuth,主流语言基本都有现成的轮子实现这个事情,确定用这个的话先了解一下概念和规范,然后找自己语言的轮子撸上去就好了。
    hantsy
        18
    hantsy  
       2019-07-04 21:33:57 +08:00
    浪费时间自已设计认证?

    能够搞清 OAuth2 规范 4 种 Grant Flow 就不错了,现在大把开源的 OAuth 服务器,而且还有云服务,如 Anth0,Okta 等。
    hantsy
        19
    hantsy  
       2019-07-04 21:39:12 +08:00
    @soulzz 知道 OAuth2 规范的角色就知道了,client(app 或者 website 等),user,resource owner, authentication server 等,其实国内的很多应用场景 client 和 resource owner 都是相同的,完全没必要使用 OAuth2,搞得那么复杂。
    qwertyzzz
        20
    qwertyzzz  
    OP
       2019-07-04 23:14:17 +08:00
    @hantsy 水平低啊 可不可以用最通俗的语言描述下啊 或者有联系方式吗 求指教
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5296 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 02:49 · PVG 10:49 · LAX 19:49 · JFK 22:49
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.