Nutzer-Authentifizierung in node-red

kostenlosKostenloses technisches Material

Dieser Inhalt ist direkt lesbar und eignet sich für das Grundlagenlernen und die Suche.

Nutzer-Authentifizierung in node-red

Vorwort

Standardmäßig kann der node-red - Editor von jedem aufgeregten Benutzer bedient werden, einschließlich der Änderung von Knoten, Streaming von Daten, Umdeployment von Streams.
Diese Standard-Bereitstellungsmethode gilt nur für die Ausführung in einem zuverlässigen Netzwerk. Im Folgenden werde ich Ihnen vorstellen, wie Sie nach der Bereitstellung von Node-Red im öffentlichen Netzwerk die Sicherheit und Berechtigungsverifizierung durchführen können.
In drei Teilen unterteilt

  • Öffnen von https-Berechtigungen
  • Schutz-Editor und admin-API
  • Schutz von HTTP-Knoten und Knoten-red

Öffnen von https

Node-red verwendet standardmäßig http für den zugriff, wenn sie denhttps-zugriff konfigurieren möchten, benötigen sie eine konfigurierungsdatei in node-redsettingvon node-red konfigurieren. Vollständige Konfigurationsparameter Konfiguration des http-Modules in nodejshttps- Abschnitts
in der KonfigurationsdateiKlicken Sie auf den Link, um die vollständige Konfiguration

zu sehen.

  • key PEM-formatierte Schlüssel, Typ kann String oder Buffer sein
  • cert PEM-formatierte Cert-kette, Typ kann String oder Buffer sein

Beispiele für die Konfiguration

https: {
    key: require("fs").readFileSync('privkey.pem'),
    cert: require("fs").readFileSync('cert.pem')
},

Wenn Sie eine Funktion konfigurieren möchten, sollten Sie den Key und CERT in die Promise einfügen.

https: function() {
    return new Promise((resolve, reject) => {
        var key, cert;
        // Do some work to obtain valid certificates
        // ...
        resolve({
            key: key
            cert: cert
        })
    });
}

Wenn Sie das Zertifikat automatisch aktualisieren möchten, nachdem Sie https konfiguriert haben, ohne Node-red neu starten zu müssen, Node-red kann dies auch tun, benötigt Nodejs über 11, und https muss als Funktion konfiguriert werden, dann setzen SiehttpsRefreshIntervalals eine Zahl, die eine automatische Aktualisierung innerhalb von mehreren Stunden bedeutet.

Editor mit Admin-API - Authentifizierung

Node-red Editor mit Admin-API unterstützt zwei Arten von Authentifizierung

  • Benutzername Passwort Zertifikat für die Authentifizierung
  • Verwenden Sie jeden OAuth / OpenID-Provider für die Authentifizierung, wie Twitter Live GitHub.

Benutzername - und Kennwortbasierte Authentifizierung muss nur in der Einstellungs-Konfigurationsdatei konfiguriert werden
Hier ist ein Konfigurationsbeispiel

adminAuth: {
    type: "credentials",
    users: [
        {
            username: "admin",
            password: "$2a$08$zZWtXTja0fB1pzD4sHCMyOCMYz2Z6dNbM6tl8sJogENOMcxWV9DN.",
            permissions: "*"
        },
        {
            username: "george",
            password: "$2b$08$wuAqPiKJlVN27eF5qJp.RuQYuy6ZYONW7a/UWYxDTtwKFCdB8F19y",
            permissions: "read"
        }
    ]
}

Administratoren können mehrere Benutzer konfigurieren. Die Anmeldungs - und Berechtigungsdaten dieser Nutzer sind tot geschrieben. Enthält die Anmeldung-Konto, Passwort und Berechtigungen. Das Passwort wird mit dem Algorithmus-Tool bcrypt Hash verschlüsselt.
Hash-Passwort generieren kann mitnode-red admin hash-pw(nach node-red 1.1.0)

OAuth / OpenID für die Autorisation

dminAuth: {
    type:"strategy",
    strategy: {
        name: "twitter",
        label: 'Sign in with Twitter',
        icon:"fa-twitter",
        strategy: require("passport-twitter").Strategy,
        options: {
            consumerKey: TWITTER_APP_CONSUMER_KEY,
            consumerSecret: TWITTER_APP_CONSUMER_SECRET,
            callbackURL: "http://example.com/auth/strategy/callback",
            verify: function(token, tokenSecret, profile, done) {
                done(null, profile);
            }
        },
    },
    users: [
       { username: "knolleary",permissions: ["*"]}
    ]
}

Konfigurationseintrag Details:
name: Policy Name
labe / icon: Informationen, die auf der Anmeldeseite angezeigt werden
strategy: Bibliotheken, die verwendet werden müssen
options: Konfigurieren Sie die Parameter, die verwendet werden müssen
verifizieren: Wenn Sie die Benutzer-Berechtigungen von Node-red definieren möchten, wenn Sie sich nicht angemeldet haben, können Sie

Default Benutzer einrichten

Wenn Sie nicht angemeldet sind, können Sie einige Berechtigungen für node-red mit der Einstellung des Standardbenutzers implementieren.
Konfigurieren Sie einen Standardbenutzer und konfigurieren Sie seine Berechtigungen für. Die Berechtigungen können alle oder nur Lesen sein.
Hier ist ein Beispiel.

adminAuth: {
    type: "credentials",
    users: [ /* list of users */ ],
    default: {
        permissions: "read"
    }
}

Zusätzlich zu den beiden großen Modulen * und read können Administratoren auchAdmin API
konfigurieren, zum Beispiel wird der Benutzer die Berechtigungflow.readfordern, um Informationen über den aktuellen Stream zu erhalten. Wenn Sie Streaming-Informationen aktualisieren möchten, müssen Sie dieflows.write- Berechtigung verwenden.

Benutzerdefinierte Authentifizierung

Die derzeit vorgestellten Benutzer-Authentifizierungen sind Hardcodierte Authentifizierungen, die Benutzerdaten und Berechtigungen für die Benutzer-Daten schreiben. Diese Methode ist nicht bequem zu erweitern, so dass node-red eine weitere Möglichkeit bietet, Benutzer-Authentifizierung anzupassen. Hier sind die Implementierungsschritte
Erstellen von<node-red>/user-authentication.jsSchreiben Sie den Lizenzcode nach der folgenden Vorlage

module.exports = {
   type: "credentials",
   users: function(username) {
       return new Promise(function(resolve) {
           // Do whatever work is needed to check username is a valid
           // user.
           if (valid) {
               // Resolve with the user object. It must contain
               // properties 'username' and 'permissions'
               var user = { username: "admin", permissions: "*" };
               resolve(user);
           } else {
               // Resolve with null to indicate this user does not exist
               resolve(null);
           }
       });
   },
   authenticate: function(username,password) {
       return new Promise(function(resolve) {
           // Do whatever work is needed to validate the username/password
           // combination.
           if (valid) {
               // Resolve with the user object. Equivalent to having
               // called users(username);
               var user = { username: "admin", permissions: "*" };
               resolve(user);
           } else {
               // Resolve with null to indicate the username/password pair
               // were not valid.
               resolve(null);
           }
       });
   },
   default: function() {
       return new Promise(function(resolve) {
           // Resolve with the user object for the default user.
           // If no default user exists, resolve with null.
           resolve({anonymous: true, permissions:"read"});
       });
   }
}

Schließlich konfigurieren Sie in der Setting-Datei adminAuth.
adminAuth: require("./user-authentication")

in der Setting-Datei

Die obigen Punkte sind alles, was in diesem Abschnitt geschrieben wird, und sind besonders wichtig, wenn Sie die Kontrolle über die Berechtigungen von node-red verfeinern möchten, insbesondere wenn Sie es auf ein Multi-Tenant - System umsetzen möchten. Danke für das Anschauen.

Relevante Etiketten
Sollte man diese Informationen für ein echtes Projekt verwenden?

Gehen Sie zum Tool Center, um Nachrichten zu analysieren, CRC-Prüfungen und Geräte-Debugging zu erledigen, oder senden Sie Anforderungen für Auswahl - und Zugangsvorschläge.

Ingenieur Mitglied

Verwandeln Sie diesen Artikel in ein umsetzbares Debuggermaterial

Erweiterte Nachrichtenanalyse, Paket-Downloads, Codebeispiele, Engineering-Szenarien und Priority-Technischer Support sind für die Real-Projekt - Bereitstellung möglich.

Unbegrenzte Werkzeuge
Datenpaket und Codepaket
Vollständige Engineering Case-Basis
Vorrangiger Zugang zum technischen Support

Antwort veröffentlichen

Ihre E-Mail - Adresse wird nicht öffentlich gemacht. Erforderliche Elemente wurden verwendet * markiert.