如何使用 HTTPOnly 访问服务器端的凭据?

时间:2020-12-30 23:59:59

标签: node.js express jwt express-jwt

我将 JWT 令牌作为 HTTPonly Cookie 从我的 React 应用程序发送到我的 express 服务器以授权用户。
令牌正在请求标头中发送,但我无法在服务器中间件中访问它。

enter image description here

这是应该处理授权的中间件,但我无法从标头访问 accessToken 并获取 ResolveName( ambiguousName, ResolveNameSearchLocation.DirectoryOnly, true, view.PropertySet);

response status 403

我使用 cors 并将凭据设置为 true,并将源设置为我的网络应用程序。

const jwt = require("jsonwebtoken");
require("dotenv").config();

module.exports = function(req, res, next) {
  // Get token from header
  const token = req.header('accessToken');

  // Check if no token
  if (!token) {
    return res.status(403).json({ msg: "authorization denied" });
  }

  // Verify token
  try {
    //it is going to give use the user id (user:{id: user.id})
    const verify = jwt.verify(token, process.env.jwtSecret);

    req.user = verify.user;
    next();
  } catch (err) {
    res.status(401).json({ msg: "Token is not valid" });
  }
};

这是我路线的重要部分:

app.use(cors({origin: 'http://localhost:3001', credentials: true }));

这是我的 express.js 服务器:

const express = require('express');
const authorize = require('../middleware/authorize')

const router = express.Router();

router.get("/verify", authorize, (req, res) => {
    try {
      res.json(true);
    } catch (err) {
      console.error(err.message);
      res.status(500).send("Server error");
    }
  });

module.exports = router

提前致谢,感谢您的努力。

1 个答案:

答案 0 :(得分:0)

您的 httpOnly cookie 是作为 cookies 来回发送的,而不是作为它们自己的标头!由于您已经拥有 cookie-parser 中间件,您应该能够像这样获取访问令牌:

const token = req.cookies.accessToken;