使用jwt身份验证保护静态文件

时间:2017-08-16 20:20:01

标签: node.js express authentication authorization jwt

我想通过JWT身份验证来保护static files。没有cookie可以实现吗?据我所知,JWT最常见的情况是在请求体或头中传递令牌,进行AJAX调用。但是当浏览器请求静态文件(JS,CSS ...)时,无法为此请求添加正文。所以唯一的方法是在cookie中存储jwt令牌?或者还有其他人?

更新

  

您是否对Cookie有特定的反对意见?

我正在阅读文章,每个人都在正文或授权标题中传递jwt标记。我用管理面板开发网站 - SPA应用程序,所以我想知道,我应该用cookie保护这个面板的html,bundle.js,css还是仅保护API并公开这些文件。只是想知道什么是常见的流程。我想,也许它可能以某种方式用Authorization标头保护这些文件(比如Basic Auth)但是使用JWT

2 个答案:

答案 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);

像这样,用户可以请求除静态图像文件之外的静态文件。