在节点JS中的FIWARE OAuth2身份validation

我试图通过Node JSvalidationFiware中的用户。 我已经创build了一个调用Oauth2的服务器代码,在运行它时,它会将您redirect到fiware页面,但是当loginFiware时什么都不显示,然后当检查/ user_info页面时,访问令牌为空

这里是我的config.js:$

var config=require('config'); config.idmURL = 'http://account.lab.fiware.org'; config.client_id = '2456'; config.client_secret = '12466'; config.callbackURL = 'http://localhost/login'; module.exports = config; 

$ oauth2.js文件来自https://github.com/ging/oauth2-example-client/blob/master/oauth2.js

调用Oauth2的代码如下:$

 /** * Module dependencies. */ var express = require('express') , routes = require('./routes') , user = require('./routes/user') , http = require('http') , path = require('path'); var OAuth2 = require('./oauth2').OAuth2; var config = require('./config'); var cookieparser= require('cookie-parser'); var expresssession= require('express-session'); var app = express(); app.use(cookieparser()); app.use(expresssession({ secret: "257a57604cb5037dcfc2d42127e1104cb705f92344ff74aabadf14d0248cbe266d3e7d567bf7068645668add108a459b5d9af1917ddc6a47cae82a7a9798ae9d" })); app.configure(function(){ app.set('port', process.env.PORT || 13299); app.set('views', __dirname + '/views'); app.set('view engine', 'jade'); app.use(express.favicon()); app.use(express.logger('dev')); app.use(express.bodyParser()); app.use(express.methodOverride()); app.use(app.router); app.use(express.static(path.join(__dirname, 'public'))); }); //code I got from http://www.hanselman.com/blog/WebMatrixAndNodejsTheEasiestWayToGetStartedWithNodeOnWindows.aspx /*module.exports = function (app) { app.get('/', function (req, res) { res.render('index', { message: 'Welcome to my site!' }); }); app.get('/about', function (req, res) { res.render('about'); }); }*/ app.configure('development', function(){ app.use(express.errorHandler()); }); //app.get('/', routes.index); app.get('/users', user.list); http.createServer(app).listen(app.get('port'), function(){ console.log("Express server listening on port " + app.get('port')); }); // ..... // Creates oauth library object with the config data var oa = new OAuth2(config.client_id, config.client_secret, config.idmURL, '/oauth2/authorize', '/oauth2/token', config.callbackURL); // Handles requests to the main page app.get('/', function (req, res) { // If auth_token is not stored in a session cookie it sends a button to redirect to IDM authentication portal if (!req.session.access_token) { res.send("Oauth2 IDM Demo.<br><br><button onclick='window.location.href=\"/auth\"'>Log in with FI-WARE Account</button>"); // If auth_token is stored in a session cookie it sends a button to get user info } else { res.send("gghhhhhhhhhhhh"); res.send("Successfully authenticated. <br><br> Your oauth access_token: " + /*req.session.access_token + */"<br><br><button onclick='window.location.href=\"/user_info\"'>Get my user info</button>"); } }); // Handles requests from IDM with the access code app.get('/login', function (req, res) { res.end(req.query.code + "Hello Http, This is the server responding ............"); // Using the access code goes again to the IDM to obtain the access_token oa.getOAuthAccessToken(req.query.code, function (e, results) { // Stores the access_token in a session cookie req.session.access_token = results.access_token; res.end("Hello Http, This is the server responding"); res.send("from inside /login code"); res.redirect('/'); }); }); // Redirection to IDM authentication portal app.get('/auth', function (req, res) { var path = oa.getAuthorizeUrl(); res.redirect(path); }); // Ask IDM for user info app.get('/user_info', function (req, res) { var url = config.idmURL + '/user/'; if (req.session.access_token == null) { res.send("access token is null"); } // Using the access token asks the IDM for the user info oa.get(url, req.session.access_token, function (e, response) { //res.end("hiiiiiiiiiiii5555444"); var user = JSON.parse(response); res.send("Welcome " + user.displayName + "<br> Your email address is " + user.email + "<br><br><button onclick='window.location.href=\"/logout\"'>Log out</button>"); }); }); // Handles logout requests to remove access_token from the session cookie app.get('/logout', function(req, res){ req.session.access_token = undefined; res.redirect('/'); }); 

$

运行时一直给予access_token为空

这个

 config.callbackURL = 'http://http://192.168.1.41/:10251/login'; 

回叫url错误。

编辑:编辑后,您的callback仍然是错误的:

 config.callbackURL = 'http://localhost/login'; 

IdM应该能够调用callbackURL。 如果它在本地主机,它将如何做?

我认为你必须configuration你的callback,如前所示:

config.callbackURL = 'public_ip:app_port/login'

你应该检查你的虚拟机安全组,以确保你的app_port是开放的(如果你正在将服务器部署到云中),否则,如果你在本地机器上,请检查你的路由器端口是否可以从外部访问。

我看到你正在build立这个端口:app.set('port',process.env.PORT || 13299);