gpt4 book ai didi

javascript - JWT token 和 CSRF

转载 作者:可可西里 更新时间:2023-10-31 22:09:06 31 4
gpt4 key购买 nike

关于 JWT 和 CSRF 一起工作,我仍然不清楚。我了解 JWT 的基础知识(它是什么以及它是如何工作的)。我也理解 CSRF 在与 session 一起使用时。同样,我知道将 JWT 存储在 localStorage 中存在风险,这就是您需要 csrf token 的原因。所以我的问题是,我该如何同时使用它们。为简单起见,假设我有一个登录页面。

1) 我让用户登录,如果用户通过身份验证,一旦使用了电子邮件和密码,服务器将发送一个 CSRF,并将使用 JWT 存储一个 httpOnly cookie(我如何使用 PHP 设置 cookie)。我的理解是,您可以使用 header('Set-Cookie: X-Auth-Token=token_value; Secure; HttpOnly;');请确认是否是这样做的方法。

2) 使用 JWT 设置 cookie 后。我如何通过后续请求发送 CSRF token > 据我了解,您将它们设置在 header 中。因此,如果我发出 Ajax 请求,我会将它们放在 header 中。

3) 发出请求后,CSRF token 随请求一起发送。验证是如何进行的。我在比较什么?

最后,实现起来安全吗!

如果您能提供尽可能详细的信息,我将不胜感激。

最佳答案

我自己看到并使用过的一种方法是将 CSRF token 作为声明包含在 JWT 中。所以当用户发送用户名和密码时,你可以这样做:

  1. 如果用户名和密码正确,请继续执行以下列表。
  2. 创建一个新的 JWT 并将生成的 CSRF token 作为声明包含在负载中,然后签署 JWT。
  3. 通过设置包含 JWT 的 HTTPOnly cookie 响应客户端的身份验证请求。这确保只有浏览器(不是客户端应用程序和可能的恶意脚本)可以访问 JWT。将 cookie 设置为 secure 也是一个好主意。 .这可以防止浏览器在使用不安全的通信 channel (即非 https)时发送 cookie。
  4. 设置 JWT cookie 时,您还应该设置一个 HTTP header ,其中也将包含您生成的 CSRF token 。请注意,现在您将在两个位置拥有 CSRF token - 在 JWT cookie 内和 HTTP header 中。
  5. 在您的客户端应用中,将 header 中的 CSRF token 存储到本地存储中。
  6. 对于每个请求,从本地存储中获取 CSRF token 并将其作为请求 header 包含在内(包含 JWT 的 cookie 由浏览器自动传递)。
  7. 服务器应从 cookie 中读取 JWT,验证其签名并从 JWT 的负载中读取 CSRF token 。然后它应该将它与请求 header 中的 CSRF token 进行比较。如果匹配,服务器可以继续处理请求。

我建议你看this谈论 JWT。它详细介绍了相同的方法(也有漂亮的图表)。欢迎观看整个演讲,或者如果您对 CSRF 特别感兴趣,请从 36:29 开始.

以下是一张幻灯片(来自上面链接的演示文稿),演示了如何一起使用 JWT 和 CSRF token 。我用与上面的列表相对应的红色数字对其进行了注释。 Sequence diagram of JWT and CSRF working together

关于javascript - JWT token 和 CSRF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47374272/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com