首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NodeJS OAuth2.0原理

NodeJS OAuth2.0原理
EN

Stack Overflow用户
提问于 2014-04-23 09:34:03
回答 1查看 1.4K关注 0票数 2

最近,我正在做一个nodeJS项目,我正在考虑如何实现我的移动应用程序的安全模块。我以前有过OAuth 2.0协议的经验,我在过去的C#项目中使用过该协议。

在.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/和类似的对堆栈溢出问题的回答。Auth between a website and self-owned API

据我所知,expressJwt保护我们的api,基本上将验证用户发送的访问令牌。但我想更进一步,将令牌与特定于应用程序的作用域联系起来,其方式类似于OAuth2.0协议。例如,我希望分配一个写、读等作用域,并让expressJwt检查用户的令牌是否具有作为特定API端点访问所需的作用域。

如果你能就如何处理这个问题向我提供一些建议,我将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-04-23 15:37:27

首先,您需要生成一个带有此类声明的令牌。它可能在API或其他地方:

代码语言:javascript
复制
var jwt = require('jsonwebtoken');

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

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

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

代码语言:javascript
复制
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。您可以将该中间件放入需要此声明的每个端点中。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23240339

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档