如何使用 HTTPOnly 访问 server-side 上的凭据?
How can I access the credentials on the server-side with HTTPOnly?
我将 JWT 令牌作为 HTTPonly Cookie 从我的 React 应用程序发送到我的快速服务器以授权用户。
令牌正在请求中发送 header 但我无法在服务器中间件中访问它。
这是应该处理授权的中间件,但我无法从 header 访问 accessToken 并获取 response status 403
.
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" });
}
};
我使用 cors 并将凭据设置为 true 并将来源设置为我的 web-app。
app.use(cors({origin: 'http://localhost:3001', credentials: true }));
这是我路线的重要部分:
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
这是我的 express.js 服务器:
'use strict';
require('dotenv').config();
const mongoose = require('mongoose')
const express = require('express');
const bodyParser = require('body-parser');
const cors = require('cors');
const app = express();
const cookieParser = require('cookie-parser');
//Import Routes
const userRoute = require('./routes/user')
app.use(cors({origin: 'http://localhost:3001', credentials: true }));
app.use(bodyParser.json());
app.use(cookieParser())
app.use('/account', userRoute);
//connect to db
mongoose.connect(
process.env.DB_CONNECTION,
{
useUnifiedTopology: true,
useNewUrlParser: true
},
() => console.log('connected to db!')
);
app.listen(3000, ()=>{
console.log("***********************************");
console.log("API server listening at localhost:3000");
console.log("***********************************");
});
提前致谢,感谢您的努力。
您的 httpOnly
cookie 将作为 cookies 而非他们自己的 headers 来回发送!由于您已经拥有 cookie-parser 中间件,您应该能够像这样获取访问令牌:
const token = req.cookies.accessToken;
我将 JWT 令牌作为 HTTPonly Cookie 从我的 React 应用程序发送到我的快速服务器以授权用户。
令牌正在请求中发送 header 但我无法在服务器中间件中访问它。
这是应该处理授权的中间件,但我无法从 header 访问 accessToken 并获取 response status 403
.
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" });
}
};
我使用 cors 并将凭据设置为 true 并将来源设置为我的 web-app。
app.use(cors({origin: 'http://localhost:3001', credentials: true }));
这是我路线的重要部分:
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
这是我的 express.js 服务器:
'use strict';
require('dotenv').config();
const mongoose = require('mongoose')
const express = require('express');
const bodyParser = require('body-parser');
const cors = require('cors');
const app = express();
const cookieParser = require('cookie-parser');
//Import Routes
const userRoute = require('./routes/user')
app.use(cors({origin: 'http://localhost:3001', credentials: true }));
app.use(bodyParser.json());
app.use(cookieParser())
app.use('/account', userRoute);
//connect to db
mongoose.connect(
process.env.DB_CONNECTION,
{
useUnifiedTopology: true,
useNewUrlParser: true
},
() => console.log('connected to db!')
);
app.listen(3000, ()=>{
console.log("***********************************");
console.log("API server listening at localhost:3000");
console.log("***********************************");
});
提前致谢,感谢您的努力。
您的 httpOnly
cookie 将作为 cookies 而非他们自己的 headers 来回发送!由于您已经拥有 cookie-parser 中间件,您应该能够像这样获取访问令牌:
const token = req.cookies.accessToken;