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

2019-07-04 16:50:15 +08:00
 qwertyzzz

之前写接口直接登录后 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 天的暂时疑问。不知道现在有什么简单的稍微规范的流程 也不一定要完全安全,,至少稍微安全点吧。,。

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

能够搞清 OAuth2 规范 4 种 Grant Flow 就不错了,现在大把开源的 OAuth 服务器,而且还有云服务,如 Anth0,Okta 等。
hantsy
2019-07-04 21:39:12 +08:00
@soulzz 知道 OAuth2 规范的角色就知道了,client(app 或者 website 等),user,resource owner, authentication server 等,其实国内的很多应用场景 client 和 resource owner 都是相同的,完全没必要使用 OAuth2,搞得那么复杂。
qwertyzzz
2019-07-04 23:14:17 +08:00
@hantsy 水平低啊 可不可以用最通俗的语言描述下啊 或者有联系方式吗 求指教

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/580052

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX