我已经使用 Bluemix 上的 Starter Boilerplate 创建了一个 NodeRed 应用程序。我注意到的一件事是我的流编辑器可供公众使用(即匿名访问可以编辑我的节点并进行部署)。
如何防止匿名访问 Bluemix 上的 Flow Editor?
如果您返回 node-red 实例的索引页面,您应该会在“ Go to your Node-RED flow editor ”下看到一个链接,上面写着“ Learn how to password-protect your instance ”(或者只是向下滚动页面)
这将带您了解如何使用环境变量为流程编辑器设置用户名和密码
密码保护流程编辑器
默认情况下,编辑器对任何人都是开放的,可以访问和修改流程。密码保护编辑器:
- 在 Bluemix 仪表板中,为您的应用程序选择“环境变量”页面
- 添加以下用户定义的变量:
- NODE_RED_USERNAME - 保护编辑器的用户名
- NODE_RED_PASSWORD - 保护编辑器的密码
- 单击保存。
如果您希望编辑器可供所有人查看,但只能由您自己更改,请参见下文:
添加用户名和密码环境变量后,每次进入 Bluemix 应用程序的 node-RED 编辑器时都会出现登录屏幕。如果您希望编辑器可供所有人查看,但只能由您自己更改,您可以修改 bluemix-settings.js 文件。这将允许每个人查看应用程序,但不能保存所做的任何更改或部署应用程序。在部署之前,您现在需要登录编辑器的右上角。
让它工作的技巧是在设置权限的 bluemix-settings.js 中添加以下行“default: { permissions: "read" }" 以及前导逗号。通过在仪表板中下载 Bluemix 应用程序的源代码来访问该文件。更改后,您将需要使用 cloud foundries 命令并推回您的代码更改(cf push)。您对 Bluemix 应用程序源代码所做的任何更新都不会影响 node-RED 编辑器,因为它们是完全不同的实体并且在不同的地方发生了变化。
来自 bluemix-settings.js 的代码片段:
if (process.env.NODE_RED_USERNAME && process.env.NODE_RED_PASSWORD) {
settings.adminAuth = {
type: "credentials",
users: function(username) {
if (process.env.NODE_RED_USERNAME == username) {
return when.resolve({username:username,permissions:"*"});
} else {
return when.resolve(null);
}
},
authenticate: function(username, password) {
if (process.env.NODE_RED_USERNAME == username &&
process.env.NODE_RED_PASSWORD == password) {
return when.resolve({username:username,permissions:"*"});
} else {
return when.resolve(null);
}
},
default: { permissions: "read" }
}
}