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.
Antwort veröffentlichen