Node-REDのダッシュボードだけにBasic認証をかけるメモ
Node-REDのダッシュボードだけにBasic認証をかけるメモです。
背景
こちらのadminAuthを使えばエディタ部分に認証をかけることができます。

こんな感じ。
そして、httpNodeAuthを使えば、HTTP InノードのHTTPエンドポイントにBasic認証を設けられます。
しかし、ダッシュボードに関してだけBasic認証をかけるとなると、どうやるか分からなかったので試してみました。
今回のバージョン
なお、今回のバージョンは、以下で進めました。
- Node-RED
- 1.0.3
- node-red-dashboard
- 2.19.4
node-red-dashboard自体にイケてる設定があった
以前フォーラムの
Alternate auth sources for httpNodeAuth - Dashboard - Node-RED Forum
あたりの議論で見かけたのですが、node-red-dashboard自体にイケてる設定がありました。
node-red-dashboard (node) - Node-RED

そう、Node-RED本体のsettings.jsのほうで、なんとダッシュボードの設定ができちゃうんです。しかも記法がNode.js Express準拠。わかりやすい。
Basic認証を入れてみる

node-red-dashboardのバージョンは2.19.4で進めます。localhostで起動しているNode-REDで試しました。
早速、middlewareの動作に合わせてBasic認証を入れてみましょう。
[node.js]node.js/expressでBASIC認証の実装 - Qiita
この記事を参考にしました。
basic-auth をインストール
npm i basic-auth
まず、Node-REDの設定フォルダ .node-red でbasic-authをインストールします。
settings.jsを探す
編集するsettings.jsを探します。探し方は、以下記事が参考になります。
basic-auth を追記
basic-authを呼び出せるように、settings.jsの上部の方で var auth = require('basic-auth'); を以下のように記述します。
// The `https` setting requires the `fs` module. Uncomment the following
// to make it available:
//var fs = require("fs");
var auth = require('basic-auth'); // この1行を加える
module.exports = {
// the tcp port that the Node-RED web server is listening on
uiPort: process.env.PORT || 1880,
middlewareに記述
そして、ui設定のところに、Basic認証のmiddleware記述をします。今回は、ユーザー名 username ・パスワード password でログインできる設定です。
// If you installed the optional node-red-dashboard you can set it's path
// relative to httpRoot
//ui: { path: "ui" },
// ここから
ui:{
middleware:function(req,res,next) {
const ui_admins = {
'username': { password: 'password' },
};
const user = auth(req);
if (!user || !ui_admins[user.name] || ui_admins[user.name].password !== user.pass) {
res.set('WWW-Authenticate', 'Basic realm="node-red"');
return res.status(401).send();
}
return next();
}
},
// ここまで
// Securing Node-RED
// -----------------
// To password protect the Node-RED editor and admin API, the following
// property can be used. See http://nodered.org/docs/security.html for details.
ここまで済ませたら settings.js を保存して、Node-REDを再起動してください。
動かしてみる
ダッシュボードにアクセスしてみます。

このようにBasic認証が表示され、今回は、ユーザー名 username ・パスワード password でログインできます。