首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Bluemix上通过node.js应用程序使用单点登录

如何在Bluemix上通过node.js应用程序使用单点登录
EN

Stack Overflow用户
提问于 2017-02-03 21:07:52
回答 1查看 530关注 0票数 1

我不明白问题出在哪里。我阅读了一些教程和SSO文档。我总是有同样的问题:我的应用程序无法启动。我的应用程序和我的服务绑定得很好。

代码语言:javascript
复制
cf push

下面是错误:error

然后当我使用cf日志时:

代码语言:javascript
复制
cf logs sso-8

响应图片:Error 1/3

下面是我的代码:

代码语言:javascript
复制
//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);
});
EN

回答 1

Stack Overflow用户

发布于 2017-02-03 23:40:49

首先需要将应用程序推送到Bluemix并运行,然后才能将SSO服务绑定到它。

将应用程序推送到Bluemix并暂存然后您需要创建未绑定的SSO服务,当SSO服务完全创建和配置后,您可以将其绑定到应用程序。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42025080

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档