NodeJS OAuth2.0原理

2023-12-27

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

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

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

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

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

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

  • https://www.npmjs.org/package/node-oauth2-server https://www.npmjs.org/package/node-oauth2-server
  • https://github.com/domenic/restify-oauth2 https://github.com/domenic/restify-oauth2

此外,我发现了一篇不错的文章,其中提出了一种在 NodeJS 中处理身份验证的好方法。https://auth0.com/blog/2014/01/07/angularjs-authentication-with-cookies-vs-token/ https://auth0.com/blog/2014/01/07/angularjs-authentication-with-cookies-vs-token/以及对 stackoverflow 上问题的类似回答。网站与自有API之间的认证 https://stackoverflow.com/questions/20793902/auth-between-a-website-and-self-owned-api/20804905?noredirect=1#comment35537435_20804905

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

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


首先,您需要生成具有此类声明的令牌。这可能在 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验证令牌的签名、过期时间和其他一些内容。如果一切正常,它会将解码后的令牌放入req.user,如果不行则返回 401。

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

NodeJS OAuth2.0原理 的相关文章

随机推荐