Node-Red权限

Node-Red默认并没有权限管理。也就是说,如果在内网环境来说相对安全,但是一旦部署到外网环境,任何人拿到URL地址都可以增删改查的,这并不是我们想要的。下面将介绍如何修改Node-Red的默认无权限状态:

独立运行

在默认运行状态下,也就是独立运行时,安装路径.node-red/settings.js会有几行被注释的代码,这里就是放置用户权限的位置。

settings.js

这里打开注释,重启本地服务,页面会跳转到这个页面。


login

注释里面的密码我们并不知道明文是什么,所以要配合Node-Red的密码加密规则来进行密码加密,替换掉注释中的密码。

通过node-red-admin生成密码

打开终端先安装node-red工具node-red-admin

 npm install node-red-admin -g

安装完成之后在执行下面的密码生成命令

 node-red-admin hash-pw
node-red-admin

按照代码提示输入即可输出加密后的密码,之后复制密码到setting.js的密码内,接着重启服务就可以登陆了。

通过bcryptjs加密

在node-red的安装目录下执行下面的命令可以得到同样的加密密码

 node -e "console.log(require('bcryptjs').hashSync(process.argv[1], 8));" your-password-here

系统集成Node-Red

因为Node-RedNode开发,所以也支持集成在Node环境内运行,下面将会以express为例集成Node-Red

添加Node-Red依赖

在项目内执行一下命令

 npm install node-red --save

app.js中添加Node-Red依赖,抛出express实例和Node-Redbin/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就会看到熟悉的登陆页面了,如下图:

login

使用问题

  • 数据隔离
    Node-Red本身不提供数据隔离功能,也就是说不论添加多少flow或者多少管理员都是共享所有数据。
  • 权限控制
    Node-Red没有过多的权限控制,只有所有(*)和只读权限(read),这对于复杂的权限控制来说会是一个大问题。

你可能感兴趣的:(Node-Red权限)