请教大家一个关于 RESTFul 认证的问题:如何保证一个用户只能有一个 JWT( Json Web Token)

2016-11-15 17:09:07 +08:00
 mynameisny

本人菜鸟,目前在开发几个 RESTFul API 。现在遇见一个头疼的问题,希望大家不吝指教:

如何能保证一个用户在一段时间内只能有一个 Token 是可用的?

---- 用户在某一个时刻只能有一个有效 Token ,即,用户已有一个有效 Token 时,再次请求 Token 时要作废之前生成的那个 Token 。

实际的业务流程是:

目前采用的方案是:

问题和纠结是:

19227 次点击
所在节点    问与答
23 条回复
mynameisny
2016-11-15 19:52:43 +08:00
@Koyoter 可能是误解了,并不是讨论 Token 绑定用户的问题,同一用户同一 IP 同一 MAC ,在同一时刻生成了多个有效 Token 。
future0906
2016-11-15 22:32:34 +08:00
@mynameisny

我没有用过 JWT ,但是我猜应该是类似于 signed-json 的东西,这个和 token 本质上是有区别的,用来做简单的鉴权可以,真正做 API 的话必须保存一个 token=>auth_state_dict 的一个关系。这个好处是服务端可以控制这个鉴权的信息(权限变更之类的)

你关键的问题在于对 RESTFul 对 stateless 的误解,所谓的 stateless 是对 HTTP 层来说的,对于 HTTP 后面的资源根本没有办法做到 stateless (不然怎么保存用户数据?)。

所以传统意义的 session ( http 层)肯定不能用,只能是存在数据库中,以保证服务可以 fail-over 。
mynameisny
2016-11-16 15:24:35 +08:00
@future0906 您提到的“ stateless 是对 HTTP 层来说的”这点理解了,但是不能将这个 Token 放在 session 中实现 fail-over 这块还是不怎么明白,烦请再帮忙讲一下。

可不可以只在用户的 SESSION 作用域中保存一份唯一的 Token ,再次请求 Token 的时候就生成并覆盖 SESSION 中这个 Token 。同时保证每次拦截认证都是从 SESSION 获取这个唯一 Token ?

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

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

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

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

© 2021 V2EX