>
如果刷新令牌过期,这意味着用户将定期注销,这从业务角度来看是非常不希望的,这可能会损害用户的保留。是否有一种方法可以在不削弱安全性的情况下避免这种情况,例如使刷新令牌成为“永恒的”?
存储和清理刷新令牌表以防止未使用的令牌积累的最佳方式是什么?假设我有以下表结构:user_id
、device_id
、refresh_token
。如果策略是永远不会使刷新令牌过期,则使它们无效的唯一方法是当用户注销时。但是,用户也可以删除应用程序,丢失或损坏设备,或者因为任何原因更改他们的device_id
。我能想到的一个解决方案是使用refreshed_at
时间戳,这将允许令牌失效,比如说在几个月不使用之后。还有其他已知的把戏吗?
假设我在刷新访问令牌时除了刷新令牌之外还使用了共享秘密字符串,我的理解是否正确,如果所有3个都被破坏(访问令牌、刷新令牌和共享秘密),我对此无能为力?refresh
API调用的最佳实践是什么?
永恒刷新令牌确实会增加风险。为了抵消这一点,可以削弱刷新期间发出的令牌。为此,可以在作用域上设置过期时间。然后,随着刷新的发生,新令牌的作用域越来越少。稍后,如果用户试图做一些高风险的事情,他们将不得不再次登录并证明对其原始凭据的控制。我想生意可能会接受这个。(关于这个想法的更多信息可以在这里找到。)
保持refreshed_at
的想法可能是避免刷新令牌表永久增长的方法。如果用户确实注销了,难道不能删除刷新令牌吗?会有一些注销endpoint,所以在它后面进行清理。这样,您的refreshed_at
只适用于夹缝中的内容。
我看不出秘密字符串有什么帮助。它本质上是另一个“令牌”,所有都是承载令牌,所以我会跳过这个。有关保护刷新流的威胁的更多信息,请查看RFC6819的第4.5节。此外,检查OAuth security BCP的4.12节(这只是一个RFC)。
@覆盖受保护的无效成功身份验证(HttpServletRequest请求、HttpServlet响应、FilterChain链、身份验证身份验证)抛出IOException、ServletException{ //响应。setHeader(“accessToken”,accessToken);//回答setHeader(“refreshToken”,refreshToken); 成功身份验证正在创
我正在构建一个使用JWT进行身份验证的应用程序。我开始做一些研究,但对于诸如刷新令牌和令牌存储之类的主题缺乏共识,我感到惊讶。 据我所知,JWT和OAuth是两个不同的协议,它们遵循不同的规范。 但我的问题是,对于一个没有通过第三方资源服务器如Google、Facebook等认证的应用程序,有一个刷新令牌真的有用吗?为什么不让JWT令牌像刷新令牌一样持续时间长。 另一方面,我可以看到,如本文所述,
我正在尝试使用 GraphQL 使用 JWT 对用户进行身份验证。登录用户后,我会收到令牌作为 JSON 响应和存储刷新令牌的 httponly cookie。(服务器端使用的是销售核心) 从Saleor的文档和其他一些博客帖子中,我假设这个响应cookie现在应该存储在浏览器中,每当我需要刷新令牌时,cookie refreshToken将用于验证我的请求。然而,当我在开发工具中将选项卡切换到“
这是我的身份验证流程: 用户登录后收到两个令牌(具有过期时间的访问令牌和没有过期时间的刷新令牌) 对于每个用户,刷新令牌存储在数据库中名为refreshTokens的json列中(这是一个数组) 在客户端,访问令牌和刷新令牌都存储在本地存储器上 当需要验证用户时,如果访问令牌过期,将使用刷新令牌创建一个新的访问令牌,并将其发送回用户并保持用户登录 当用户注销时,数据库中存储的刷新令牌(在refre
我正在构建一个移动应用程序,并且正在使用JWT进行身份验证。 最好的方法似乎是将JWT访问令牌与刷新令牌配对,这样我就可以根据需要频繁地使访问令牌过期。 刷新令牌是什么样子的?是随机字符串吗?那串加密了吗?是另一个JWT吗? 刷新令牌将存储在用户模型的数据库中以便访问,对吗?在这种情况下似乎应该加密 在用户登录后,我是否会将刷新令牌发送回,然后让客户端访问单独的路由来检索访问令牌?
我正在尝试从应用程序服务中获取Google的刷新令牌,但我不能。 日志说 2016-11-04T00:04:25 PID[500]收到的详细请求:获取https://noteappsvr.azurewebsites.net/.auth/login/google?access _ type = offline 2016-11-04t 00:04:25 PID[500]从https://account