【发布时间】:2016-09-21 22:58:45
【问题描述】:
这是我不断收到的错误 “CWOAU0062E: OAuth 服务提供商无法重定向请求,因为重定向 URI 无效。请联系您的系统管理员解决问题。”
var express = require('express');
// Add for SSO
var cookieParser = require('cookie-parser');
var session = require('express-session');
var passport = require('passport');
var OpenIDConnectStrategy = require('passport-idaas-openidconnect').IDaaSOIDCStrategy;
var redis = require('redis');
var RedisStore = require('connect-redis')(session);
// cfenv provides access to your Cloud Foundry environment
// for more info, see: https://www.npmjs.com/package/cfenv
var cfenv = require('cfenv');
// get the app environment from Cloud Foundry
var appEnv = cfenv.getAppEnv();
// create a new express server
var app = express();
var services = JSON.parse(process.env.VCAP_SERVICES || null);
// get configuration for redis backing service and connect to service
var redisConfig = appEnv.getService(/Redis.*/);
if(redisConfig == null) {
console.log('ERROR: Failed to create REDDISCONFIG!!!');
} else {
var redisPort = redisConfig.credentials.port;
var redisHost = redisConfig.credentials.hostname;
var redisPasswd = redisConfig.credentials.password;
var redisclient = redis.createClient(redisPort, redisHost, {no_ready_check: true});
redisclient.auth(redisPasswd, function (err) {
if (err) {
throw err;
}
});
redisclient.on('connect', function() {
console.log('Connected to Redis');
});
}
// define express session services, etc for SSO
app.use(cookieParser());
// app.use(session({resave: 'true', saveUninitialized: 'true' , secret: 'keyboard cat'}));
if(redisConfig != null) {
app.use(session({
store: new RedisStore({ client: redisclient }),
resave: 'true',
saveUninitialized: 'true',
secret: 'top secr8t'
}));
}
app.use(passport.initialize());
app.use(passport.session());
passport.serializeUser(function(user, done) {
done(null, user);
});
passport.deserializeUser(function(obj, done) {
done(null, obj);
});
// find config object for the SSO services from VCAP_SERVICES through cfenv/appEnv
var ssoConfig = services.SingleSignOn[0];
//appEnv.getService(/Single Sign On.*/)
if(ssoConfig == null) {
console.log('ERROR: Failed to instantiate SSOCONFIG. Its not available!!!');
} else {
var client_id = ssoConfig.credentials.clientId;
var client_secret = ssoConfig.credentials.secret;
var authorization_url = ssoConfig.credentials.authorizationEndpointUrl;
var token_url = ssoConfig.credentials.tokenEndpointUrl;
var issuer_id = ssoConfig.credentials.issuerIdentifier;
}
// you MUST change the host route to match your application name
// var callback_url = 'https://scaleSSO-TOR0815.mybluemix.net/auth/sso/callback';
var callback_url = 'https://krishnodejs.mybluemix.net/auth/sso/callback';
var OpenIDConnectStrategy = require('passport-idaas-openidconnect').IDaaSOIDCStrategy;
var Strategy = new OpenIDConnectStrategy({
authorizationURL : authorization_url,
tokenURL : token_url,
clientID : client_id,
scope: 'openid',
response_type: 'code',
clientSecret : client_secret,
callbackURL : appEnv.url + '/auth/sso/callback',
// callbackURL : callback_url,
skipUserProfile: true,
issuer: issuer_id},
function(accessToken, refreshToken, profile, done) {
process.nextTick(function() {
profile.accessToken = accessToken;
profile.refreshToken = refreshToken;
done(null, profile);
})
});
passport.use(Strategy);
app.get('/login', passport.authenticate('openidconnect', {}));
function ensureAuthenticated(req, res, next) {
if(!req.isAuthenticated()) {
// req.session.originalUrl = 'https://krishnodejs.mybluemix.net';
res.redirect('/login');
} else {
return next();
}
}
app.get('/auth/sso/callback',function(req,res,next) {
var redirect_url = 'https://krishnodejs.mybluemix.net/hello';
// req.session.originalUrl;
passport.authenticate('openidconnect',{
successRedirect: redirect_url,
failureRedirect: '/failure',
})(req,res,next);
});
app.get('/hello', ensureAuthenticated, function(req, res) {
res.send('Hello, '+ req.user['id'] + '!'); }
);
app.get('/failure', function(req, res) {
res.send('login failed'); });
// serve the files out of ./public as our main files
app.use(express.static(__dirname + '/public'));
// start server on the specified port and binding host
app.listen(appEnv.port, function() {
// print a message when the server starts listening
console.log("server starting on " + appEnv.url);
});
我在 SSO“https://krishnodejs.mybluemix.net/hello”的返回 URL 设置中有以下 URL
非常欢迎任何修复建议。
失败的重定向 URL 有我的回调 URL 正确,除了奇怪的 &scope=openid....但我想,这可能不是问题
我查看了服务器端日志是否有错误。但是没有。让我不知道问题出在哪里
【问题讨论】:
标签: node.js single-sign-on ibm-cloud