小编0xt*_*bit的帖子

如何使用Next.js和Rails后端安全地存储JWT?

我正在尝试在Next.js前端和Rails API后端之间实现身份验证,并且很难理解如何正确安全地执行此操作。

我在rails端使用了jwt-sessions gem,它在登录时会返回access_token,a refresh_tokencsrf令牌。在csrf只能通过报头被发送,并且需要对所有非GET或HEAD的请求。的accessrefresh可以通过报头中给定的由饼干。

我可以实现后端,以返回JSON响应中的所有令牌,或设置cookie,或同时使用两者。

问题是,在客户端,我看不到存储这些令牌的真正方法,即:

  1. 安全
  2. 在SSR和浏览器中均可用

这是我看到的选项

选项1:服务器设置的HTTPOnly Cookie

这就是jwt-sessions宝石的建议。将CSRF保留在localStorage中,但将其他令牌保留在服务器设置的httpOnly cookie中。

这似乎是最安全的方法,但是SSR via getInitialProps根本无法使用,因为它无法通过发送Cookie fetch。我什至无法手动发送它们,因为在JS中看不到它们。

选项2:非httpOnly Cookie

这就是官方的下一个示例似乎所做的(尽管只有一个可能是无状态的令牌)

服务器或浏览器都可以设置没有 httpOnly 的cookie 。

我可以通过SSR访问它,但这不使我对XSS开放吗?

选项3:使用浏览器存储

只需将所有令牌放入localStorage和/或即可sessionStorage。这似乎是最糟糕的选择,因为它在SSR中不起作用,据我所知并不安全。

????

我想念什么吗?是否非httpOnly,如官方示例所示,可以吗?有没有更好的方法?还是我必须忽略SSR(因此是Next.js的杀手级功能之一)?

javascript authentication ruby-on-rails jwt next.js

5
推荐指数
1
解决办法
132
查看次数

标签 统计

authentication ×1

javascript ×1

jwt ×1

next.js ×1

ruby-on-rails ×1