我应该将JWT令牌存储在哪里?httpOnly对于cookie意味着什么? [英] Where should I store my JWT token and what does httpOnly mean for a cookie?
问题描述
我阅读了有关auth的文档。
我从事Nuxt项目,我的服务器返回CookieHtppOnly
我的问题:
关于jwt令牌存储的念力很多,有些不推荐使用localStroage
我还了解到,我们可以直接将令牌复制到下一个请求的头中,但我找不到示例。
另外,当CookieHttpOnly
时,我们如何使用它,因为JavaScript无法访问它?
// https://github.com/FormidableLabs/urql/tree/main/exchanges/auth#quick-start-guide
if (result.data?.refreshLogin) {
// save the new tokens in storage for next restart
localStorage.setItem('token', result.data.refreshLogin.token);
localStorage.setItem('refreshToken', result.data.refreshLogin.refreshToken);
//...
}
资源:
- nuxt/auth=>;https://www.npmjs.com/package/@nuxtjs/auth-next
- urql/auth=>;https://www.npmjs.com/package/@urql/exchange-auth
- https://formidable.com/open-source/urql/docs/advanced/authentication/
- https://formidable.com/open-source/urql/docs/api/auth-exchange/#options
- https://github.com/FormidableLabs/urql/tree/main/exchanges/auth#quick-start-guide
- https://blog.logrocket.com/jwt-authentication-best-practices/
- https://www.howtographql.com/react-urql/5-authentication/
jwt
对推荐答案使用cookie比使用localStorage更安全。通常使用refreshToken
刷新的accessToken
有较短的过期时间。
客户端API(如JavaScript)无法访问HttpOnly cookie。此限制消除了通过跨站点脚本(XSS)窃取Cookie的威胁。 如果浏览器允许您访问它,则这将是浏览器的缺陷。
如果您希望浏览器修改特定的cookie并且不担心XSS,那么可以删除HTTPOnly标志。只有服务器端代码才应该有权访问这些Cookie。
如果您希望客户端代码修改您的Cookie,则只能设置secure: true
,并允许将其用于httpOnly
以外的更多用途。
cookie-universal-nuxt非常适合管理客户端Cookie。
回复您的评论:
您说的是什么中间件?
你的东西有没有治疗失眠之类的病?发送GQL调用,看看您是否有什么东西。
我只在客户端使用过GQL,所以我会就它应该在哪里给出我的反馈,但它可能不是百分之百准确。
您应该有一些后端逻辑来处理整个登录流,但是如果您想要管理某人是否登录,这实际上是在前端。您需要一些状态来查看要向最终用户显示的内容。当然,这依赖于这样的假设,即您仅将应用程序作为SPA运行,并且您的后端充当GQL API。但是,您可能有各种方法来解决这个问题,这取决于页面的隐私程度等等。很难给出这样一个宽泛的答案。
两个后端都处理JWT。客户端负责存储它并检查它是否过期,然后刷新它。它会将其发送到后端,以查看您是否可以访问请求的数据,依此类推。对于前端,如果您希望将其保存在cookie中以在刷新之间保持不变,那么它位于前端。
JWT刷新令牌存储在前端。当它过期时,您的前端应该将它发送到您的后端,让它更新它的值。然后,您可以保留更新的版本,直到它再次过期。
如果您所说的资源请求是指访问数据库中包含的值,则这是某种后端作业。您的前端负责调用查询/突变,甚至不知道幕后是什么。这就是GQL的全部意义所在,通过移除典型睡觉API确实存在的所有可能的端点,使前端看起来更加友好。
总结
您的前端不能包含敏感信息,这是获取此处的主要内容。
您的大多数问题都是知道堆栈的哪一侧是相关的。我不确定您是否是全栈开发人员,但您可能应该阅读一些关于GQL一般工作方式的文章。
此外,这里有许多问题。我建议你一次只专注于一件事,不要同时涉及很多方面,否则很难整体理解。
另外,StackOverflow上的这类帖子(要求很多)很快就会关闭。
这篇关于我应该将JWT令牌存储在哪里?httpOnly对于cookie意味着什么?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!