如何使用 jwt 保护 express 中的静态文件夹

Posted

技术标签:

【中文标题】如何使用 jwt 保护 express 中的静态文件夹【英文标题】:How to protect static folder in express with jwt 【发布时间】:2016-02-02 07:53:52 【问题描述】:

我有基于 nodejs 和 angularjs 构建的应用程序,我在其中使用基于 jwt 令牌的身份验证进行身份验证,并且 api 调用运行良好

即使用户现在没有登录应用程序正在服务所有静态资源如果用户没有登录如何避免加载应用程序并将用户重定向到登录页面

最后我能够在 app.js 中找到它,添加代码 sinpet app.use('/app/view/*', function(req, res, next)

    if (!req.headers['authorization'] ) 
      res.sendfile('app/views/Error.html');

     else 
      next();
    
  );

这意味着 /app/view/ 附带的请求检查请求的标头是否包含使用 jwt 生成的令牌

【问题讨论】:

在客户端,检查用户的认证,然后允许他访问静态文件 请在同一点上详细说明我的一些文章或示例 【参考方案1】:

如果您的 JWT 存储在 cookie 中,您可以使用这样的道路:

router.all('/*', function(req, res, next)
  if (!req.cookies.session) 
    return res.json("ERROR");
  
  else 
    ValidateCookieFunction(req.cookies.session, function(auth_state) 
      if (!auth_state)
          return res.json("ERROR");
      else
          next();
    );
  
);

否则你可以在 HTTP-Header 中提供你的 JWT

router.all('/*', function(req, res, next)
  if (!req.headers['x-access-token']) 
    return res.json("ERROR");
  
  else 
    ValidateJWTFunction(req.headers['x-access-token'], function(auth_state) 
      if (!auth_state)
          return res.json("ERROR");
      else
          next();
    );
  
);

【讨论】:

我没有使用 cookie 是会话来存储令牌我已将令牌放在 $window 对象中并编写了一个拦截器来使用令牌攻击请求标头 @DhanaLakshmi 然后您在 HTTP 标头中提供您的 JWT,请参阅我编辑的帖子 可以使用 jwt 令牌来提供 express bcoz 的静态内容吗?我在服务器端有一个拦截器,用于检查以 /api 开头的请求 检查令牌是否存在 如果不发送则不存在未经授权我如何使用相同的东西来服务我的静态资源 在我向您展示的示例中,道路是:router.all('/*',因此它会在前往新道路 (next()) 之前检查所有 URL 中的 POST/GET。如果您在 /public 中提供静态内容,则可以将道路设为 router.all('/public/*' 我正在使用这个例子 app.use(function(req, res, next) if (!req.headers['Bearer']) return res.json("ERROR "); 其他 下一个(); );如何避免登录页面和注册页面等路由

以上是关于如何使用 jwt 保护 express 中的静态文件夹的主要内容,如果未能解决你的问题,请参考以下文章

使用 express-jwt 进行基于角色的授权?

在 Node.js 中使用 express-jwt 令牌保护非 api (res.render) 路由

express-jwt 不尊重不受保护的路径

使用 GraphQL 和 jwt-express 绕过 JWT

保护 Express API

如何使用 JWT 在 Express 中验证单个路由(无代码重复)的多种类型用户的身份验证令牌?