授权、令牌和 nodejs

Posted

技术标签:

【中文标题】授权、令牌和 nodejs【英文标题】:Authorization, tokens and nodejs 【发布时间】:2019-02-26 19:20:47 【问题描述】:

我正在考虑对我的应用进行授权。除了针对 mongo 数据库的 JWT 身份验证之外,我还想为不同角色保护某些路由。我对 OAuth 或 3rd 方服务不感兴趣

我遇到的困难是在哪里存储角色。如果我查询数据库进行身份验证并返回一个令牌,我是否也应该在有效负载中返回角色?如果用户被进一步授权,然后在经过身份验证后检查中间件?有人不能用管理员权限重写令牌吗?

执行此操作的标准方法是什么?

这最终是在前端为 Angular 应用提供服务的 api

谢谢

【问题讨论】:

一个JWT是签名的,所以如果token被编辑了,hash将不再匹配,token可以被拒绝。不过,该检查只能在后端/API 中进行。 SPA 几乎无法提供安全保障 【参考方案1】:

使用JWT signed token 执行此操作的标准方法@ 由在其上生成的服务器的私钥签名,并将公钥发送给所有消费客户端。如果有人更改令牌内的正文 authenticating authority,即服务器将尝试通过其私钥对签名进行数字验证。由于此令牌与通过服务器签名发送的令牌不同,因此签名永远不会匹配。

此外,为了保护您的 JWT token 在活动会话中被嗅出,您已制定了 CSRF/XSRF 缓解策略

【讨论】:

谢谢。我想我更关心将角色添加到应用程序结构中的过程。不仅是身份验证,还有授权。能够达到某些端点的特定人员

以上是关于授权、令牌和 nodejs的主要内容,如果未能解决你的问题,请参考以下文章

当用户在nodeJS / Express和Angular中空闲一段时间(基于令牌的授权)时,我如何使我的JWT令牌过期

使用从客户端收到的谷歌授权码在服务器端 javascript (nodejs) 上获取访问令牌

如何使用 nodejs 设置授权标头并表达

res.redirect 时未找到授权令牌

未经授权使用jwt令牌

AngularJS 不发送授权或任何额外的键/值标头