文章目录
- [什么是 Node-RED?](#什么是 Node-RED?)
- 准备
- authentik配置
- [Node-RED 配置](#Node-RED 配置)
- 配置验证
什么是 Node-RED?
Node-RED 是一种用于以新的有趣的方式连接硬件设备、API 和在线服务的编程工具。
它提供了一个基于浏览器的编辑器,可以轻松地使用画布中可用的大量节点组合流,这些节点可以在单击中部署到运行时。
这需要修改 Node-RED 的 settings.js 文件,并安装额外的 Passport-js 包;有关详细信息,请参见 Securing Node-RED 文档。
准备
在本指南中,使用了以下占位符:
authentik.company 是 authentik 的 FQDN。
nodered.company 是 Node-RED 的 FQDN。
authentik配置
为了支持 Node-RED 与 authentik 的集成,您需要在 authentik 中创建一个应用程序/提供程序对。
-
作为管理员登录到 authentik 并打开 authentik 管理员界面。
-
导航至
应用程序 > 应用程序,然后单击使用提供程序创建以创建应用程序和提供程序对。 (或者,您可以先单独创建提供程序,然后创建应用程序并将其连接到提供程序。)

-
应用程序 :提供一个描述性名称、一个可选的应用程序类型组、策略引擎模式和可选的 UI 设置。
应用名称:NodeRed, Slug会自动带出:nodered

-
选择提供者类型 :选择
OAuth2/OpenID Connect作为提供者类型。

-
配置提供者 :提供名称(或接受自动提供的名称)、用于此提供者的授权流程以及以下必需配置。
注意客户端 ID、 客户端密钥和 slug 值,因为它们将在稍后需要。设置一个 Strict 重定向 URI 为 https://nodered.company/auth/strategy/callback/ 。
选择任何可用的签署密钥。
确保禁用加密。

-
配置绑定 (可选):您可以创建一个 绑定 (策略、组或用户)来管理用户"我的应用程序"页面上应用程序的列表和访问权限。

-
-
单击提交以保存新应用程序和提供程序。
Node-RED 配置
- 使用 npm 安装
passport-openidconnect
导航到 Node-RED 的 node_modules 目录。这取决于您选择的安装方法。在官方的 Node-RED Docker 容器中,node_modules 目录位于数据卷 data/node_modules/ 中。或者,使用 Docker 容器,使用 docker exec -it nodered bash 和 cd /data/node_modules,在容器内使用 npm。
运行 npm install passport-openidconnect 命令。
- 编辑settings.js
编辑 Node-RED 的 settings.js 文件(/data/settings.js),使用外部身份验证源(passport-openidconnect)。
json
adminAuth: {
type:"strategy",
strategy: {
name: "openidconnect",
label: 'Sign in with authentik',
icon:"fa-cloud",
strategy: require("passport-openidconnect").Strategy,
options: {
issuer: 'https://authentik.company/application/o/<application_slug>/',
authorizationURL: 'https://authentik.company/application/o/authorize/',
tokenURL: 'https://authentik.company/application/o/token/',
userInfoURL: 'https://authentik.company/application/o/userinfo/',
clientID: '<client_id>',
clientSecret: '<client_secret>',
callbackURL: 'https://nodered.company/auth/strategy/callback/',
scope: ['email', 'profile', 'openid'],
proxy: true,
verify: function(context, issuer, profile, done) {
return done(null, profile);
},
}
},
users: function(user) {
return Promise.resolve({ username: user, permissions: "*" });
}
},
配置验证
