SSO节点是Azure AD

时间:2020-10-18 23:23:11

标签: node.js azure azure-active-directory saml

我正在尝试使用nodeJS与azure AD设置SSO(SAML)。与我合作的公司向我提供了一些信息。他们基本上是希望将我的网站托管在该内部网站上,并使用那里的数据库对它进行身份验证。我得到了一些信息,(租户ID,用户访问URL,应用程序ID和对象ID以及元数据文件)我无法在网上找到任何有用的信息,这是我第一次尝试这样做。请让我知道是否有人可以帮忙!提前致谢!我的代码如下:)

var SamlStrategy = require('passport-saml').Strategy;

passport.use(new SamlStrategy(
  {
    path: '/login/callback',
    entryPoint: 'https://myapps.microsoft.com/signin/SAML-companyname-DEV/id?tenantId=id
    issuer: 'issuer'
  },
  

  function(profile, done) {
    findByEmail(profile.email, function(err, user) {
      if (err) {
        return done(err);
      }
      return done(null, user);
      
    });
  })
);

app.post('/login/callback',
  function(req, res) {
    console.log('inside /login/callback')
    //after login, goes here, but renders back to login/callback. then back here.
   res.render('login.ejs')
  }
);

app.get('/login',
  passport.authenticate('saml', { failureRedirect: '/failed-login.ejs', failureFlash: true }),
  function(req, res) {
      console.log("inside azuread /login passport saml")
     res.render('index.ejs')
  }
);


// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');

//app.use(favicon(path.join(__dirname, 'public', 'favicon.ico')));
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(session(
  {
    resave: true,
    saveUninitialized: true,
    secret: 'test secret'
  }));
app.use(passport.initialize());
app.use(passport.session());
app.use(express.static(path.join(__dirname, 'views')));


// 404 and forward to error handler
app.use(function(req, res, next) {
  var err = new Error('Not Found');
  err.status = 404;
  next(err);
});

// error handler
app.use(function(err, req, res, next) {
  // set locals, only providing error in development
  res.locals.message = err.message;
  res.locals.error = req.app.get('env') === 'development' ? err : {};

  // render the error page
  res.status(err.status || 500);
    res.send(err.status)
});

1 个答案:

答案 0 :(得分:0)

文档是关键-https://docs.microsoft.com/en-us/azure/active-directory/develop/quickstart-v2-nodejs-webapp

此外,这取决于站点的托管位置,如果它不是Azure App服务,则易于实现SSO(或)是否是其他IIS服务器[Prem]需要进行一些配置更改/应用代码更改。