1
どこに問題があるのかわかりません。私はいくつかのチュートリアルとSSOの文書に従った。私はいつも同じ問題があります:私のアプリは起動しません。私のアプリと私のサービスはよく結びついています。ここでBluemixでnode.jsアプリケーションでシングルサインオンを使用する方法
cf push
は誤りです: error
それから私はCFのログを使用する場合:レスポンスの
cf logs sso-8
画像: Error 1/3
ここに私のコードは次のとおりです。
//package.json
{
"name": "NodejsStarterApp",
"version": "0.0.1",
"description": "Insert description here",
"private": true,
"scripts": {
"start": "node app.js"
},
"dependencies": {
"express": "latest",
"passport": "latest",
"body-parser": "latest",
"cookie-parser": "latest",
"express-session": "latest",
"cfenv": "1.0.x",
"passport-idaas-openidconnect": "latest"
},
"repository": {},
"engines": {
"node": "4.x"
}
}
//app.js
var express = require('express');
var passport = require('passport');
var cookieParser = require('cookie-parser');
var session = require('express-session');
var OpenIDConnectStrategy = require('passport-idaas-openidconnect').IDaaSOIDCStrategy;
var app = express();
app.use(cookieParser());
app.use(session({ secret: 'keyboard cat', resave: false, saveUninitialized: true }));
app.use(passport.initialize());
app.use(passport.session());
passport.serializeUser(function(user, done) {
done(null, user);
});
passport.deserializeUser(function(obj, done) {
done(null, obj);
});
var services = JSON.parse(process.env.VCAP_SERVICES || "{}");
var ssoConfig = services.SingleSignOn[0];
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;
var callback_url = 'https://sso-8.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 : 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 = req.originalUrl;
res.redirect('/login');
} else {
return next();
}
}
app.get('/auth/sso/callback', function(req, res, next) {
var redirect_url = req.session.originalUrl;
passport.authenticate('openidconnect', {
successRedirect: '/hello',
failureRedirect: '/failure',
})(req,res,next);
});
app.get('/hello', ensureAuthenticated, function(request, response) {
request.send('Hello, '+ request.user['id'] + '!\n' + '<a href="/logout">Log Out</a>');
});
app.get('/logout', function(req, res){
req.logout();
res.redirect('/');
});
app.get('/failure', function(req, res) {
res.send('Login failed');
});
app.get('/', function (req, res) {
res.send('<h1>Bluemix Service: Single Sign On</h1>' + '<p>Sign In with a Social Identity Source (SIS): Cloud directory, Facebook, Google+ or LinkedIn.</p>' + '<a href="/auth/sso/callback">Sign In with a SIS</a>');
});
var appport = process.env.VCAP_APP_PORT || 8888;
var host = (process.env.VCAP_APP_HOST || 'localhost');
var server = app.listen(appport, function() {
var host = server.address().address
var port = server.address().port
console.log('Example app listening at http://%s:%s', host, port);
});
ありがとう、ジェニー。 SSOサービスのドキュメントは、この順序で次の手順を挙げ: 1.それらBINDアプリやサービス 2を作成します 3.アプリ 4.プッシュアプリ これは私がやったことで、アプリを変更します開始しませんでした。しかし、私のミスはどこから来たのですか?実際には、モジュールのバージョン: "passport-idaas-openidconnect": "latest" は "最新"でなく "2.0.0"であるべきです。 私はそれを変更し、今は動作します。もう一度ありがとう:) – Matito