2014-09-23 13 views
9

W rzeczywistości uczę bezpieczeństwa REST Apis i wydaje się, że wiele osób używa protokołów OAuth2 i OpenId do zarządzania uwierzytelnianiem.Tworzenie serwera OAuth2 z nodejs

starałem się wdrożyć dwa serwer OAuth2 używając:

Dla pierwszego rozwiązania, uruchamianie przykładów działa poprawnie, ale muszę zrobić coś bezpaństwowego (aw przykładzie uwierzytelnienie lub używa sesji ...)

Czy możesz pomóc mi stworzyć najprostszy serwer oauth2 lub domyślnie wyjaśnić mi całą funkcjonalność tych bibliotek?

Dzięki za wcześniej

Odpowiedz

13

I wdrożone za pomocą "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); 

Aby symulować, użyj 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 Zrzuca: https://github.com/manjeshpv/node-oauth2-server-implementation/tree/master/mongo-dump

Uwaga, że ​​mają tam problem z funkcją validateScope musi być zastąpiony:

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

można udostępnić git przykładowy projekt? Jestem nowy dla nodejs i ekspresowych. Ale muszę zaimplementować serwer oauth2. Pierwsze zamieszanie – coder

+2

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

+1

Jak zostałby skonfigurowany w celu zintegrowania z https://developers.google.com/actions/identity/oauth2-code -pływ ? – endamaco

Powiązane problemy