【发布时间】:2020-05-02 17:33:41
【问题描述】:
我在我的 react-native 应用程序中使用 JSON Web 令牌进行身份验证。当用户登录时,会创建一个令牌并将其发送给用户以存储在本地存储中。令牌有效期为 24 小时。每当调用服务器(nodejs)时,都会在标头中发送令牌。
问题是,24 小时后,用户必须重新登录。我不想要这个,所以我开始寻找解决方案。我找到的解决方案:刷新令牌。
到目前为止我的方法。如果我做错了什么,请纠正我。
1) 用户登录。auth token 和 refresh token 都发送给用户以存储在本地存储中。 (这样够安全吗?)
2) 用户想要更改他的个人资料。我在标头中使用 auth token 向服务器发送请求。
3) 服务器收到授权令牌。如果身份验证令牌仍然有效,请执行您必须做的任何事情。如果身份验证令牌已过期,请检查用户是否有刷新令牌(仍然有效)。在这一点上,我被困住了。我是否应该从服务器向用户发送一个新请求,询问“你有刷新令牌吗?”如果是,则将此刷新令牌发送到服务器以创建新的身份验证令牌?
我的问题如下:
假设用户想要从列表中获取最后 10 条消息。带有 auth token 的请求被发送到服务器。
=> auth token 有效:响应是一个包含 10 条消息的列表
=> auth token 是invalid:响应是从服务器到客户端对刷新令牌的新请求
这是 2 种不同的响应。这不会弄乱我在客户端的代码吗?我该如何处理?
另一种方法是在每个请求中发送 auth token 和 refresh token。但这有意义吗?
【问题讨论】:
-
3) 我应该从服务器向用户发送一个带有问题的新请求吗? - 服务器从不向客户端发送请求。当访问令牌过期时,服务器应以 401 响应,客户端应通过请求新的访问令牌来响应 401 响应。见here
标签: node.js authentication jwt