我想通过JWT身份验证来保护static files。没有cookie可以实现吗?据我所知,JWT最常见的情况是在请求体或头中传递令牌,进行AJAX调用。但是当浏览器请求静态文件(JS,CSS ...)时,无法为此请求添加正文。所以唯一的方法是在cookie中存储jwt令牌?或者还有其他人?
更新
您是否对Cookie有特定的反对意见?
我正在阅读文章,每个人都在正文或授权标题中传递jwt标记。我用管理面板开发网站 - SPA应用程序,所以我想知道,我应该用cookie保护这个面板的html,bundle.js,css还是仅保护API并公开这些文件。只是想知道什么是常见的流程。我想,也许它可能以某种方式用Authorization标头保护这些文件(比如Basic Auth)但是使用JWT
答案 0 :(得分:1)
通常没有必要保护静态资产(例如.html
,.css
,.png
,.js
等)文件并保护您的API端点就足够了。
但是,如果使用AJAX检索资产(例如SPA的HTML片段),则可以将JWT作为标头传递到请求中,在后端,Web服务器可以检查标头并仅返回HTML片段如果当前用户有权访问它。
此外,您可以将JWT存储在local storage内,并配置您的AJAX库以从本地存储中获取令牌,并在将它们发送到服务器之前将其添加到您的请求中。
答案 1 :(得分:0)
我不知道您的确切意思是什么,但是我认为您想保护指定的静态文件,例如个人图像或其他一些文件。
如果按照我的想法,您可以.use(jwt)
保护指定的静态文件,然后保护.use(static)
文件。
例如:
const express = require("express");
const app = express();
const exjwt = require("express-jwt");
const STATIC_PATH = path.join(process.cwd(), "src", "static");
app
.use("/images", exjwt({ secret: "SECRET" }))
.use(express.static(STATIC_PATH))
app.get('/', (req, res) => {
res.send('...')
});
app.listen(3000);
像这样,用户可以请求除静态图像文件之外的静态文件。