node.js - NodeJS OAuth2.0原理

标签 node.js security oauth-2.0

最近我正在开发一个nodeJS项目,我正在考虑如何着手和实现我的移动应用程序的安全模块。我以前在 C# 项目中使用过 OAuth 2.0 协议(protocol)。

.NET中有两个不错的开源项目

  1. https://github.com/thinktecture/Thinktecture.IdentityServer.v3
  2. https://github.com/thinktecture/Thinktecture.AuthorizationServer

前者是支持联合身份验证的身份提供商,后者是 OAuth 2.0 提供商。

因此,我决定为我的 NodeJS 应用程序采用相同的安全基础设施。但据我所知,没有任何项目可以与这些项目相媲美。

我发现了一些非常好的项目,虽然尚未完成,但是是一个好的开始:

此外,我发现了一篇不错的文章,其中提出了一种在 NodeJS 中处理身份验证的好方法。 https://auth0.com/blog/2014/01/07/angularjs-authentication-with-cookies-vs-token/以及对 stackoverflow 上问题的类似回答。 Auth between a website and self-owned API

据我了解,expressJwt 保护我们的 api,并且基本上会验证用户发送的访问 token 。但我想更进一步,将 token 与应用程序特定范围关联起来,就像使用 OAuth2.0 协议(protocol)一样。例如,我想分配写入、读取等范围,并让expressJwt检查用户的 token 是否具有作为特定API端点访问所需的范围。

如果您能为我提供一些有关如何处理此主题的建议,我将不胜感激。

最佳答案

首先,您需要生成包含此类声明的 token 。这可能在 API 或其他地方:

var jwt = require('jsonwebtoken');

var claims = {
  name: user.name
  can_write: true,
  can_post_timeline: false
};

var token = jwt.sign(claims, 'my-super-secret');

然后,为了验证您将执行以下操作:

var jwt = require('express-jwt');

app.use(jwt({secret: 'my-super-secret'}));

function require_time_line_access (req, res, next) {
  if (!req.user.can_post_timeline) return res.send(401);
  next();
}

app.post('/timeline', 
  require_time_line_access,
  function(req, res) {
    //do timeline stuff
  });

express-jwt 验证 token 的签名、过期时间和其他一些内容。如果一切正常,它将解码后的 token 放入 req.user 中,如果不正常,则返回 401。

require_time_line_access 是一个中间件,可确保用户拥有此声明,如果没有,则返回 401。您可以将此中间件放置在需要此声明的每个端点中。

关于node.js - NodeJS OAuth2.0原理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23240339/

相关文章:

java - 使用 OAuth2 保护 REST Web 服务 : General principles

mysql - Sequelize 在查询中返回连接表

javascript - 构造 json 响应。 NodeJS 发送空响应

javascript - 模块和 require()

java - 出于安全目的,如何在某些节点上禁用 Hazelcast 分布式 IExecutorService?

java - 可用的填充方案是否符合 BSI 指南

node.js - 安装 npm body-parser 时出错

javascript - mongodb 注入(inject)的可能性

reactjs - React js 中的 oAuth 2 实现

security - 使用 openid connect 作为多个应用程序的 SSO