2017-02-03 16 views
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); 
}); 

答えて

1

アプリケーションをBluemixにプッシュしてからSSOサービスをバインドする必要があります。

アプリケーションをBluemixにプッシュして実行します 次に、SSOサービスをアンバインドとして作成する必要があります。 SSOサービスが完全に作成され、設定されたら、アプリケーションにバインドできます。

+0

ありがとう、ジェニー。 SSOサービスのドキュメントは、この順序で次の手順を挙げ: 1.それらBINDアプリやサービス 2を作成します 3.アプリ 4.プッシュアプ​​リ これは私がやったことで、アプリを変更します開始しませんでした。しかし、私のミスはどこから来たのですか?実際には、モジュールのバージョン: "passport-idaas-openidconnect": "latest" は "最新"でなく "2.0.0"であるべきです。 私はそれを変更し、今は動作します。もう一度ありがとう:) – Matito

関連する問題