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を再起動してください。
動かしてみる
http://localhost:1880/ui/
ダッシュボードにアクセスしてみます。
このようにBasic認証が表示され、今回は、ユーザー名 username ・パスワード password でログインできます。