使用nodejs创buildOAuth2服务器

我正在研究REST Apis安全性,似乎很多人都在使用OAuth2和OpenId协议来pipe理身份validation。

我试图实现两个OAuth2服务器使用:

  • http://passportjs.org/为客户端和https://github.com/jaredhanson/oauth2orize为服务器端

  • https://www.npmjs.org/package/node-oauth2-server

对于第一个解决scheme,运行示例工作正常,但我需要做一些无状态的(在这个例子中,作者使用会话…)

你能帮我创build一个最简单的oauth2服务器吗?或者默认地向我解释这些库的整个function?

感谢提前

我使用"oauth2-server": "^3.0.0-b2"

 var express = require('express'); var oauthServer = require('oauth2-server'); var Request = oauthServer.Request; var Response = oauthServer.Response; var authenticate = require('./components/oauth/authenticate') var app = express(); app.use(bodyParser.urlencoded({ extended: true })); app.use(bodyParser.json()); // https://github.com/manjeshpv/node-oauth2-server-implementation/blob/master/components/oauth/models.js var oauth = new oauthServer({ model: require('./models.js') }); app.all('/oauth/token', function(req,res,next){ var request = new Request(req); var response = new Response(res); oauth .token(request,response) .then(function(token) { // Todo: remove unnecessary values in response return res.json(token) }).catch(function(err){ return res.status( 500).json(err) }) }); app.post('/authorise', function(req, res){ var request = new Request(req); var response = new Response(res); return oauth.authorize(request, response).then(function(success) { res.json(success) }).catch(function(err){ res.status(err.code || 500).json(err) }) }); app.get('/secure', authenticate(), function(req,res){ res.json({message: 'Secure data'}) }); app.get('/me', authenticate(), function(req,res){ res.json({ me: req.user, messsage: 'Authorization success, Without Scopes, Try accessing /profile with `profile` scope', description: 'Try postman https://www.getpostman.com/collections/37afd82600127fbeef28', more: 'pass `profile` scope while Authorize' }) }); app.get('/profile', authenticate({scope:'profile'}), function(req,res){ res.json({ profile: req.user }) }); app.listen(3000); 

要模拟,使用邮差: https : //www.getpostman.com/collections/37afd82600127fbeef28

MySQL / PostgreSQL / MSSQL兼容: https : //github.com/manjeshpv/node-oauth2-server-implementation/blob/master/components/oauth/models.js

MySQL的DDL: https : //github.com/manjeshpv/node-oauth2-server-implementation/blob/master/sql/oauth_demo.sql

Mongo Dumps: https : //github.com/manjeshpv/node-oauth2-server-implementation/tree/master/mongo-dump

请注意,他们有一个问题,需要将validateScope函数replace为:

 function validateScope(user, client) { return user.scope === client.scope }