2014-09-23 10 views
9

Ich bin tatsächlich studieren REST Apis Sicherheit, und es scheint, dass viele Menschen OAuth2 und OpenId-Protokolle zur Verwaltung der Authentifizierung verwenden.OAuth2-Server-Erstellung mit Nodejs

Ich habe versucht, zwei OAuth2-Server zu implementieren:

Für die erste Lösung, Das Ausführen der Beispiele funktioniert korrekt, aber ich muss etwas staatenlos machen (und im Beispiel die Auth oder verwendet Sitzungen ...)

Können Sie mir helfen, den einfachsten oauth2-Server zu erstellen, der mir die gesamte Funktion dieser Bibliotheken erklärt?

Dank für das Voraus

Antwort

13

implementiert I "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); 

mit simulieren, Verwenden Postman: https://www.getpostman.com/collections/37afd82600127fbeef28

MySQL/PostgreSQL/MSSQL Compatiable: 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

Beachten Sie, dass sie ein Problem gibt mit der validateScope Funktion muss mit ausgewechselt werden:

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

können Sie das git Beispielprojekt teilen? Ich bin neu bei Nodejs und Express. Aber ich muss den oauth2 Server implementieren. Verwirrt werden – coder

+2

https://github.com/manjeshpv/node-oauth2-server-implementation/ –

+1

Wie würde es konfiguriert werden, um mit https://developers.google.com/actions/identity/oauth2-code integriert zu werden -fließen ? – endamaco