Node-REDのダッシュボードだけにBasic認証をかけるメモ

Node-REDのダッシュボードだけにBasic認証をかけるメモです。

背景

設定 : Node-RED日本ユーザ会

こちらのadminAuthを使えばエディタ部分に認証をかけることができます。

image

こんな感じ。

そして、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

image

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

Basic認証を入れてみる

image

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を探します。探し方は、以下記事が参考になります。

設定ファイル : Node-RED日本ユーザ会

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/

ダッシュボードにアクセスしてみます。

image

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