node.js - 如何将 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 吗?如果有任何不清楚的地方,请添加评论或答案,我会在很短的时间内检查。
解决方案
推荐阅读
- opencv - 如何检测边界框然后进行OCR,扫描图像可以有段落和表格
- batch-file - 如果在文本文件中找不到文件名的(一部分),则删除文件的批处理文件?
- javascript - 我不能使用 emoji.js
- c++ - 在多图中插入值时出现未知错误
- c# - 如何使用if语句与listbox1.Selecteditem更改图片
- javascript - 从可能是异步的回调中捕获并返回错误
- r - Rmarkdown中的YAML标题字体和颜色
- html - 仅在broser内到达整个组件的末尾后,如何使反应组件开始滚动(y轴)?
- firebase - Flutterfire - 如何根据 ID 列表获取多个文档
- entity-framework - .Net 5 在控制器中更改 DbContext