0

我在我的 react-native 应用程序中使用 JSON Web Tokens 进行身份验证。当用户登录时,会创建一个令牌并将其发送给用户以存储在本地存储中。令牌有效期为 24 小时。每当调用服务器(nodejs)时,都会在标头中发送令牌。

问题是,24 小时后,用户必须重新登录。我不想要这个,所以我开始寻找解决方案。我找到的解决方案:刷新令牌。

到目前为止我的方法。如果我做错了什么,请纠正我。

1) 用户登录。一个auth token和一个refresh token都被发送给用户存储在本地存储中。(这样够安全吗?)

2) 用户想要更改他的个人资料。我使用标头中的身份验证令牌向服务器发送请求。

3) 服务器收到授权令牌。如果身份验证令牌仍然有效,请执行您必须做的任何事情。如果身份验证令牌已过期,请检查用户是否有刷新令牌(仍然有效)。在这一点上,我被困住了。我是否应该从服务器向用户发送一个新请求,询问“你有刷新令牌吗?” 如果是这样,将此刷新令牌发送到服务器以创建新的身份验证令牌?

我的问题如下:

假设用户想要从列表中获取最后 10 条消息。带有身份验证令牌的请求被发送到服务器。

=> 身份验证令牌有效:响应是 10 条消息的列表

=> 身份验证令牌无效:响应是从服务器到客户端的刷新令牌的新请求

这是两种不同的反应。这不会弄乱我在客户端的代码吗?我该如何处理?

另一种方法是在每个请求中发送身份验证令牌刷新令牌。但这有意义吗?

4

1 回答 1

0

您是指像 OAuth2 中那样刷新令牌吗?如果是这样,这些通常仅用于服务器客户端(而不是浏览器应用程序)。使用刷新令牌需要客户端身份验证才能检索新的访问令牌,这与仅将访问令牌发送到资源(通常仅自行提供访问权限)不同。

因此,不清楚使用刷新令牌会在此处添加任何内容。如果您认为让人们登录您的应用程序超过 24 小时足够安全,为什么不延长会话持续时间并延长您发行的令牌的生命周期?

在存储方面,将安全信息保存在本地存储中通常是不受欢迎的。如果您确定您没有易受攻击的外部 Javascript,并且您在您的网站上使用了非常严格的内容安全策略标头以防止任何内联 Javascript 或不受欢迎的来源,并且您的应用程序不是超高风险,那么它可能没问题。

于 2020-01-15T23:03:38.740 回答