如何在前端使用 HttpOnly jwt cookie

Posted

技术标签:

【中文标题】如何在前端使用 HttpOnly jwt cookie【英文标题】:How do I use an HttpOnly jwt cookie on the frontend 【发布时间】:2021-01-04 17:06:26 【问题描述】:

由于无法读取 HttpOnly cookie,如何在前端使用 HttpOnly JWT cookie?

从 HttpOnly cookie 中获取 JWT 后存储 JWT 的最佳做法是什么?既然我已经从后端传递了 cookie,我还需要将它存储在某个地方吗?

我知道本地存储不安全。

我不知道这是否重要,但我正在 http://localhost:8080/ 上提供我的 Vue 应用程序,并且我正在使用 Node/Express 在 http://localhost:3000 上运行我的后端应用程序.

【问题讨论】:

【参考方案1】:

httpOnly 设计的 cookie 无法通过您的浏览器访问。

您必须将credentials 包含在您使用的任何http 客户端的请求中:

fetch.js

// with axios
axios.post(url, formData, 
    withCredentials: true
)

// or with fetch
fetch(url, 
  credentials: 'include'
);

在您的快速入口点内:

app.js

const cors = require("cors");
const cookieParser = require("cookie-parser");

const corsOptions = 
    credentials: true,
    ... other cors options ...
;

app.use(cookieParser(secret));
app.use(cors(corsOptions));

这些配置将自动将您的httpOnly cookie 与您的请求一起传递,您可以从您的服务器访问它们

如果你的 cookie 是 signed:

const tokenName = req.signedCookies;

否则:

const tokenName = req.cookies;

【讨论】:

以上是关于如何在前端使用 HttpOnly jwt cookie的主要内容,如果未能解决你的问题,请参考以下文章

在 Django/DRF 中使用 JWT 身份验证并将 JWT 存储在 HttpOnly Cookie 中

使用 httponly cookie 将 JWT 从节点 REST API 发送到 Vue.js SPA

如何使用 DRF djangorestframework-simplejwt 包将 JWT 令牌存储在 HttpOnly cookie 中?

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

如何提取 Cognito 生成的 JWT,并将其存储为 HTTPonly cookie 并与后续 API 请求一起使用(React)

在 .net core api 中存储/验证存储在 HttpOnly cookie 中的 JWT 令牌