是否有任何Node.js的OAuth2模块提供访问令牌validation,无需额外的服务器调用?

我正在Node.js中进行一个项目,我们需要安全的授权给客户,就Facebook和Twitter而言,我们必须使用他们的APIvalidation令牌

我谷歌它,发现很多例子,但都使用第三方API即Facebook,Twitter等

但问题是我们必须发出我们自己的令牌,以便设备在与我们的API交谈时使用。 是否有任何模块实现的Node.jsauthentication和生成令牌?

我不清楚你的意思是想find一个节点模块(所有这些都是第三方API),它提供了OAuth2客户端function,可以在没有额外的服务器调用的情况下对facebook和twitter进行工作。

然而,这是说,你可能会看到这些:

而且由于Node.js是JavaScript,所以您可以为客户端浏览器打包常规JavaScript,只要您模拟客户端JavaScript所需的浏览器环境元素即可。

您的问题使我认为封装这里提供的OAuth库可能是有用的: https : //github.com/andreassolberg/jso ,并将其卷入一个Node模块,以便您可以拥有一个像浏览器一样的客户端一个OAuth2提供者,但在Node中。

所以这里是这个项目的开始:

这里是在github上( https://github.com/hoonto/node-jso )或者

npm instal node-jso 

它不可能工作,因为我需要修补它本地存储和xhr的方式,但这是相当微不足道的,我认为要解决。

我提供了一些callback函数,所以你可以像这样使用它:

 var jso = require("node-jso")('http://www.google.com'); jso.onlocation = function(location){ //Handle location changes }; jso.onhash = function(hash){ //Handle hash changes }; jso.onhref = function(href){ //Handle href changes }; jso.jso_configure({ "facebook": { client_id: "xxxxxxxxxx", redirect_uri: "http://localhost/~andreas/jso/", authorization: "https://www.facebook.com/dialog/oauth", presenttoken: "qs" } }); 

如果你想帮忙,随时提交拉请求!

您在hoonto的post中看到的客户端ID是您必须生成的客户端ID,并丢弃Facebook网站。 这是您的应用程序的客户端ID,而不是用户的客户端ID。 所以你只需要填写一次,没有oAuth模块就可以工作。

您需要为每个社交媒体(FB,TW和GP)创build一个应用程序。

例如,对于Facebook,您可以使用应用程序页面来获取此客户端ID: https : //developers.facebook.com/apps

对于Google Plus,您可以在控制台页面中生成客户端ID: https : //code.google.com/apis/console/

这validation令牌https://github.com/jaredhanson/passport-http-bearer ,有很多方法可以生成令牌(MD5电子邮件+密码+盐)

我真的不明白你想要什么,但这是我现在使用的东西。

“PassportJS”

它对我来说工作得很好

如果我明白你的意思是什么,我的项目具有相同的function。 我的应用程序充当Oauth2提供程序,但将授权委托给其他提供程序。 我的应用程序不支持范围,因为它需要额外的对话框,所以我不使用所有的oauth2function。 但我计划在未来。 我使用这个模块:

  • performance
  • 护照
  • oauth2orize
  • 护照谷歌-的OAuth
  • 护照VKontakte等
  • 护照的Facebook

工作中的主要帮助是oauth2orize模块的例子。

您可以在没有任何额外模块的情况下执行简单的仅限twitter应用程序OAuth2。

 var https = require('https'); var querystring = require('querystring'); var postData = querystring.stringify({ 'grant_type' : 'client_credentials' }) var options = { hostname: 'api.twitter.com', path: '/oauth2/token', method: 'POST', headers: { 'Authorization': 'Basic ' + new Buffer( process.env.CONSUMER_KEY + ":" + process.env.CONSUMER_SECRET ).toString('base64'), 'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8', 'Content-Length': postData.length } // headers } var req = https.request(options, function(res) { console.log("statusCode: ", res.statusCode); console.log("headers: ", res.headers); res.on('data', function(d) { process.stdout.write(d); }); }); req.on('error', function(e) { console.error(e); }); req.write(postData); req.end(); 

如果你把上面的代码放在foo.js中,那么你应该得到如下的东西:

 $ node foo.js statusCode: 200 headers: { 'cache-control': 'no-cache, no-store, must-revalidate, pre-check=0, post-check=0', connection: 'close', 'content-disposition': 'attachment; filename=json.json', 'content-length': '155', 'content-type': 'application/json;charset=utf-8', date: 'Mon, 07 Sep 2015 03:50:59 GMT', expires: 'Tue, 31 Mar 1981 05:00:00 GMT', 'last-modified': 'Mon, 07 Sep 2015 03:50:59 GMT', ml: 'S', pragma: 'no-cache', server: 'tsa_a', 'set-cookie': [ 'guest_id=v1%3A144159785995688631; Domain=.twitter.com; Path=/; Expires=Wed, 06-Sep-2017 03:50:59 UTC' ], status: '200 OK', 'strict-transport-security': 'max-age=631138519', 'x-connection-hash': 'e3fa57b3959c2fdf39fdf4bdd5851b35', 'x-content-type-options': 'nosniff', 'x-frame-options': 'SAMEORIGIN', 'x-response-time': '21', 'x-transaction': '2296d03323316c3e', 'x-tsa-request-body-time': '0', 'x-twitter-response-tags': 'BouncerCompliant', 'x-ua-compatible': 'IE=edge,chrome=1', 'x-xss-protection': '1; mode=block' } {"token_type":"bearer","access_token":"[YOUR ACCESS TOKEN HERE!!!]"}