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

Posted

技术标签:

【中文标题】在 Node.js 中使用 express-jwt 令牌保护非 api (res.render) 路由【英文标题】:Protect non-api (res.render) route with express-jwt token in Node.js 【发布时间】:2014-10-18 00:00:01 【问题描述】:

首先,我已阅读有关使用 jwt(express-jwt 和 jsonwebtoken)保护 REST API 路由的所有教程,并且它可以很好地用于此目的。

这很好用:

app.use('/api', postApiRoute);

这在某种程度上也有效,我的意思是.. 当我使用它显示带有角度 http 请求调用的网页时,它确实验证了令牌,但是当您添加 expressJwt(secret: secret.secretToken) 时,您不能再访问 localhost:3000/api/postexpressJwt(secret: secret.secretToken) 是这里的问题。

app.use('/api', expressJwt(secret: secret.secretToken));
app.use('/api', userApiRoute);

我真正需要的是使用 jwt 保护非 json 但 html/文本请求 路由,例如:

app.get('/admin*', expressJwt(secret: secret.secretToken), function(req, res)
    res.render('index', 
        //user: req.session.user, <- not sure how to do the equivalent, to extract the user json-object from the express-jwt token?
        js: js.renderTags(),
        css: css.renderTags()
    );
);

.. 不必在 angular/js 中发出 http 请求,而是使用 express 的渲染功能。

我需要这样做,因为我的应用程序有 2 个主服务器路由视图,其中 1 个用于加载管理脚本,1 个用于加载前端(主题)资产。

但是,我无法让 jwt/tokens 与服务器呈现的视图一起使用,只能使用 json api 请求。

我得到的错误是:“UnauthorizedError: No Authorization header was found”

找不到有关(受 jwt 保护的服务器渲染视图,仅服务器端 api 请求和客户端 angular/ajax http 请求)的任何信息,所以我希望我的问题很清楚,并且我不必回退再次使用会话。

【问题讨论】:

嘿,你有没有得到任何地方?我也在努力解决这个问题。您无法保护简单的 GET 路由似乎很疯狂。如果知道,我在这里有一个问题,我很乐意接受答案。 ***.com/questions/31822234/… 【参考方案1】:

不确定我是否理解正确,但如果您在谈论 entry html 路由(即,直接由浏览器加载,而不是由您的 Angular 应用程序加载),那么您根本无法指示浏览器如何设置授权标头(不引入其他一些基于重定向的身份验证流程)。

【讨论】:

以上是关于在 Node.js 中使用 express-jwt 令牌保护非 api (res.render) 路由的主要内容,如果未能解决你的问题,请参考以下文章

Node.js - Express.js JWT 总是在浏览器响应中返回一个无效的令牌错误

Node js、JWT 令牌和背后的逻辑

在 Volley 请求中添加 JWT 令牌

express-jwt 的任何完整示例? [关闭]

如何在 express-JWT 中获取授权令牌?

jsonwebtoken和express-jwt的使用