ReactJS 和 DRF:如何将 JWT 令牌存储在 HTTPonly cookie 中?

2023-12-24

目前,我的 Web 应用程序可以使用登录功能,在发出登录请求后,服务器会使用包含 2 个令牌的 JSON 对象进行响应:

这是登录功能:

async function login() {
    const data = {
            "email": "[email protected] /cdn-cgi/l/email-protection",
            "password": "testPassword123"
        }
    const response = await Backend.post('auth/login/', data)
    console.log(response.data)
}

这是回应:

{
"access": "access_token_here",
"refresh": "refresh_token_here" 
}

根据 Postman 的说法,此响应还包含 3 个 cookie:

1) access_token=access_token_here; Path=/; Domain=localhost; HttpOnly; Expires=Thu, 29 Oct 2020 06:49:56 GMT;
2) csrftoken=csrf_token_here; Path=/; Domain=localhost; Expires=Thu, 28 Oct 2021 06:44:56 GMT;
3) sessionid=session_id_here; Path=/; Domain=localhost; HttpOnly; Expires=Thu, 12 Nov 2020 06:44:56 GMT;

要向服务器中受保护的端点发出请求,我可以将 access_token 作为 cookie 或承载令牌发送。 我的理解是,将这些令牌存储在本地存储中并不是很安全。

那么如何将它们存储在 httpOnly cookie 中呢?或者有更好的方法来处理这个问题吗?

我的后端服务器使用 Django Rest Framework。


我猜你想设置httpOnly cookie,因为它比在localStorage中设置令牌(tokens)更安全?

最安全的方法是仅将令牌存储在内存(状态)中,而不将其存储在 cookie 或 localStorage 中。每次页面刷新后,强制用户重新登录。这就是银行网站的运作方式。

如果您需要在客户端存储令牌(您不想在每次刷新后强制登录),那么我会推荐 localStorage 而不是 cookie。 React 本身受到 XSS 保护。但是,如果存在 XSS,那么 localStorage 数据当然很容易读取,但 cookie 中的数据(甚至 httpOnly)也可以被利用(通过发送带有可用 cookie 的请求)。 localStorage 和 cookies 都容易受到 XSS 的攻击,但正如我所写,React 具有针对 XSS 的保护。使用 localStorage 也更容易实现。

请参阅此讨论:链接到 reacjs Reddit 子版块 https://www.reddit.com/r/reactjs/comments/cubfsa/local_storage_vs_cookies_authentication_tokens/.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ReactJS 和 DRF:如何将 JWT 令牌存储在 HTTPonly cookie 中? 的相关文章

随机推荐

  • 为什么编译器说:“enable_if”不能用于禁用此声明

    template
  • imshow 的颜色条,以 0 为中心并带有符号刻度

    我想生成一个由多个数组组成的绘图网格 具有正值和负值 具有对数刻度 共享相同的颜色条 我已经实现了颜色条的共享部分 使用 ImageGrid 和常见的最大值和最小值 并且我知道在只有正值的情况下 我可以在 imshow 调用上使用 LogN
  • 无法设置 JFrame 的最大大小(Windows 下)

    我正在尝试限制 a 的最大尺寸JFrame 然而 这只适用于 Linux 在 Windows 下 JFrame可以自由调整大小 代码非常简单 public class TestMaxSize extends javax swing JFra
  • 媒体播放器、进度条

    这是播放媒体时更新进度条的正确方法吗 我以为MediaPlayer中会有回调 但我找不到它 mediaPlayer start final SeekBar progress SeekBar dialog findViewById R id
  • 如何获取进程列表

    我正在使用节点并将其安装在我的机器上 现在我想获取我的机器上运行的进程列表 以便我可以查看 Apache 是否正在运行 MySQL 是否已启动等 我怎样才能做到这一点 我的 js 文件中只有非常基本的代码 我什至不知道从哪里开始 这是我的代
  • Eslint 预期缩进 1 个制表符但发现 4 个空格错误

    我正在使用 VScode 和最新版本的 Eslint 这是我第一次使用 linter 使用制表符作为缩进时 我不断收到此 linting 错误 严重性 错误 message 预期缩进 1 个制表符 但发现有 4 个空格 缩进 在 4 5 来
  • Pytorch批量矩阵向量外积

    我正在尝试使用 PyTorch 生成向量矩阵外积 张量 假设向量v有尺寸p和矩阵M有尺寸qXr 乘积的结果应为 pXqXr Example size 2 v 0 1 size 2X3 M 0 1 2 3 4 5 size 2X2X3 v M
  • 使用画布的 3D 立方体。需要一点改进

    我使用以下代码制作了这个 3d 立方体 Matrix mMatrix canvas getMatrix canvas save camera save camera rotateY angle camera getMatrix mMatri
  • Python 字符串与字节数组之间的转换

    如何将人类可读的字符串转换为字节数组并返回 假设我有 Hello World 并且想要一个字节数组 然后从字节数组到相同的字符串 您可以使用bytearray https docs python org 2 library function
  • 将 collections.deque 转换为 python 列表的算法复杂度是多少?

    我试图确定将 collections deque 对象转换为 python 列表对象的复杂度是 O n 我想它必须获取每个元素并将其转换为列表 但我似乎找不到双端队列背后的实现代码 那么 Python 是否在幕后内置了一些更高效的东西 可以
  • nlp - 如何检测句子中的单词是否指向颜色/身体部位/车辆

    因此 正如标题所示 我想知道句子中的某个单词是否指向 1 一种颜色 The grass is green 因此 绿色 是颜色 2 身体的一部分 Her hands are soft 因此 手 是身体的一部分 3 车辆 I am drivin
  • 循环数据提取所有以 .co.uk 结尾的电子邮件地址

    我试图通过应对以下挑战来提高我的编程 PHP 技能 接下来的问题并不是关于代码问题 也不是我要求代码问题 而是关于应该应用的编程逻辑 9 email protected cdn cgi l email protection 0 0 1 1
  • 远程访问HDFS

    我有hadoop服务器在某些服务器上运行 比如说IP 192 168 11 7 其 core site xml 如下
  • DataTable 服务器端仅在我有少量数据时才工作

    我正在从 json 加载传递到有关数据表表的服务器端处理 我有两种环境 一种用于测试 一种用于生产 它们具有相同的功能和数据库结构 当我在测试环境中测试新进程时 脚本加载数据没有任何问题 5行 相同的脚本不会在生产环境中加载数据 1200
  • 使用opencv读取带有type_id opencv-image的xml文件

    嘿 我在读取 type id opencv image 的 xml 文件时尝试了很多搜索 我在这里查找的只是 opencv matrix 所有可用的帮助对我来说都是无用的 请帮我从 xml 文件中读取图像矩阵 我将 xml 文件的上半部分粘
  • 如何循环这个CSS滑块动画?

    我正在尝试创建一个 css 滑块 到目前为止我只成功地让它正确迭代一次 有没有办法让它无限循环而不改变最终结果 div class slider div class slides div class slider 1 div div cla
  • 如何获取匹配源的JRE/JDK?

    我希望在我的 Windows 计算机上获得至少一个 JRE JDK 级别 其中我的 JRE JDK 源与 JRE JDK 的确切级别相匹配 我的目的是能够在调试时进入系统类 关于如何执行此操作有什么建议吗 提前致谢 大多数有用的源代码都位于
  • MongoDB查询,通过userID查找所有

    这是我的数据库中 客户 的结构 id oid xxxxx user oid xxxxx name Test Mobile email null phone xxxxx completed false v 0 我正在尝试查询具有特定 user
  • 如何使用 Moment 正确处理 Bing 中的“/Date(...-0700)/”日期格式?

    我正在使用 它以这种格式返回日期 Date 1538245980000 0700 它看起来像以毫秒为单位的 Unix 时间戳 后面跟着一个时区 此刻文档声称能够正确处理这些 https momentjs com docs parsing a
  • ReactJS 和 DRF:如何将 JWT 令牌存储在 HTTPonly cookie 中?

    目前 我的 Web 应用程序可以使用登录功能 在发出登录请求后 服务器会使用包含 2 个令牌的 JSON 对象进行响应 这是登录功能 async function login const data email email protected