首页 > 解决方案 > 如何将 OKTA SAML 与 NodeJS 或 AngularJS 集成

问题描述

我有一个使用 NodeJS + AngularJS 的 Web 应用程序,我想将 OKTA SAML 与我的应用程序集成(使用 Okta 作为 IdP,使用我们的应用程序作为 SP),现在我在 Okta End 上配置后有一些信息,如下所示: https: //www.pastepic.xyz/image/image.abqL4 https://www.pastepic.xyz/image/image.ab3G3 我有 Idp 单点登录 URL、IdP 颁发者、X.509 证书以及元数据。我的问题是如何将它与 NodeJS 或 AngularJS 集成,我应该如何使用来自 okta 的数据。

我曾尝试在 NodeJS 中使用护照库,app.js 如下所示:

var express = require("express");
var path = require("path");
var bodyParser = require("body-parser");
var routes = require("./api/routes");
var http = require("http");
var morgan = require('morgan');
var cookieParser = require('cookie-parser');
var session = require('express-session');
var passport = require('passport');
require("./api/helper/global_function");

// Defining the port and env to run on
const { environment, port, samlUrl } = require('./appconfig.js');
const PORT = port || 8000;
const ENV = environment || 'dev'
const SAMLURL = samlUrl
const config = require('./api/auth/config.js')[ENV];
require('./api/auth/passport.js')(passport, config);

var app = express();
app.set("port", PORT);
app.set("env", ENV)
app.set("samlUrl", SAMLURL)

// To Allow CORS calls
app.use(function (req, res, next) {
  res.header('Access-Control-Allow-Origin', '*')
  res.header('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE');
  res.header('Access-Control-Allow-Headers', 'Content-Type, Authorization');
  res.header('Access-Control-Allow-Credentials', true);
  return next();
});
app.use(morgan('combined'));
app.use(cookieParser());

app.use(session(
  {
    resave: true,
    saveUninitialized: true,
    secret: 'something'
  }));

// Enable parsing of posted forms
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(passport.initialize());
app.use(passport.session());

// Set static directory before defining routes
app.use(express.static(path.join(__dirname, "dist")));
app.use("/node_modules", express.static(__dirname + "/node_modules"));

// Add some routing
app.use("/", function (req, res, next) {
  if (req.isAuthenticated()) {
    console.log(req.isAuthenticated())
    return next();
  }
  req.session.returnTo = req.originalUrl;
  res.redirect(samlUrl);
});
app.use("/api", routes);
app.use("*", (req, res) => {
  res.sendFile(path.join(__dirname, 'dist/index.html'));
});

// To verify the listen is up and running
var server = app.listen(app.get("port"), function () {
  var port = server.address().port;
  console.log("Magic happens on port " + port);
});

它不起作用,因为所有请求都未经身份验证,当我进行 api 调用时,应用程序不断指示我单点登录页面。

也许我对此完全错了,有人可以帮助我吗?给我一个提示或告诉我一些基本逻辑

任何人都可以帮助 SAML 吗?如果有任何不清楚的地方,请添加评论或答案,我会在很短的时间内检查。

标签: node.jsangularjsauthenticationokta

解决方案


推荐阅读