Node-Red默认并没有权限管理。也就是说,如果在内网环境来说相对安全,但是一旦部署到外网环境,任何人拿到URL地址都可以增删改查的,这并不是我们想要的。下面将介绍如何修改Node-Red的默认无权限状态:
独立运行
在默认运行状态下,也就是独立运行时,安装路径.node-red/settings.js
会有几行被注释的代码,这里就是放置用户权限的位置。
这里打开注释,重启本地服务,页面会跳转到这个页面。
注释里面的密码我们并不知道明文是什么,所以要配合Node-Red的密码加密规则来进行密码加密,替换掉注释中的密码。
通过node-red-admin
生成密码
打开终端先安装node-red
工具node-red-admin
npm install node-red-admin -g
安装完成之后在执行下面的密码生成命令
node-red-admin hash-pw
按照代码提示输入即可输出加密后的密码,之后复制密码到setting.js
的密码内,接着重启服务就可以登陆了。
通过bcryptjs
加密
在node-red的安装目录下执行下面的命令可以得到同样的加密密码
node -e "console.log(require('bcryptjs').hashSync(process.argv[1], 8));" your-password-here
系统集成Node-Red
因为Node-Red
为Node
开发,所以也支持集成在Node
环境内运行,下面将会以express
为例集成Node-Red
:
添加Node-Red
依赖
在项目内执行一下命令
npm install node-red --save
在app.js
中添加Node-Red
依赖,抛出express
实例和Node-Red
在bin/www
下使用
#app.js
const express = require("express");
const nodeRed = require("node-red");
const app = express();
app.use("/",express.static("public"));
module.exports = {app,nodeRed};
在bin/www中加入express
实例和Node-Red
启动和设置项等,具体代码如下
#!/usr/bin/env node
const http = require('http');
const { app, nodeRed } = require("../app");
// Create a server
const server = http.createServer(app);
const setting = require("../settings");
// Create the settings object - see default settings.js file for other options
const settings = {
httpAdminRoot: "/red",
httpNodeRoot: "/api",
userDir: "/Users/jonathan/Documents/workSpace/node-red-data",
functionGlobalContext: {}, // enables global context
adminAuth: {
type: "credentials",
users: [{
username: "admin",
password: "$2b$08$5kDdqiVAJBQKTcrgWqndPuXMy3pfasDCwC3XI0TVnDJz84wsaYd.y",
permissions: "*"
}]
},
};
const finalSettings = Object.assign({},setting, settings);
// Initialise the runtime with a server and settings
nodeRed.init(server, finalSettings);
// Serve the editor UI from /red
app.use(finalSettings.httpAdminRoot, nodeRed.httpAdmin);
// Serve the http nodes UI from /api
app.use(finalSettings.httpNodeRoot, nodeRed.httpNode);
server.listen(8000);
// Start the runtime notice : must start after server listen
nodeRed.start();
经过以上的设置,Node-Red就被集成进第三方系统。在浏览器中输入http://127.0.0.1:8000/red
就会看到熟悉的登陆页面了,如下图:
使用问题
- 数据隔离
Node-Red本身不提供数据隔离功能,也就是说不论添加多少flow或者多少管理员都是共享所有数据。 - 权限控制
Node-Red没有过多的权限控制,只有所有(*
)和只读权限(read
),这对于复杂的权限控制来说会是一个大问题。