Sicherheitsrelevante Funktionen für Adapterentwickler
Verhindern Sie den Zugriff anderer Adapter auf sensible Daten
Wenn Sie ein Benutzerpasswort oder ein Token speichern müssen, das Benutzern Zugriff auf Ihren Dienst gewährt, kann es im Interesse der Benutzer liegen, dass externe Adapter nicht auf diese Informationen zugreifen können.
Zu diesem Zweck können Sie in Ihrer io-package.json ein Feld protectedNative anlegen. Es enthält ein Array aller Attribute aus native, die geschützt werden sollen.
Beachten Sie, dass die Adapter admin, cloud und iot stets Zugriff auf geschützte Attribute haben. admin benötigt diesen Zugriff, um Benutzern das Lesen von Attributen auf der Konfigurationsseite des jeweiligen Adapters und das manuelle Bearbeiten geschützter Felder in system.adapter.<namespace>.<instance> zu ermöglichen.
Beispiel:
...
"protectedNative": [
"password"
],
"native": {
"password": "topSecret"
}
...
Automatische Ver- und Entschlüsselung sensibler Daten
Wenn Sie ein Benutzerpasswort oder ein Token speichern müssen, das Benutzern Zugriff auf Ihren Dienst gewährt, ist es möglicherweise im Interesse des Benutzers, dass diese sensiblen Informationen nicht im Klartext gespeichert werden.
Zu diesem Zweck können Sie Ihrer Datei io-package.json ein Feld encryptedNative hinzufügen. Dieses Feld muss ein Array aller Attribute enthalten, die im Attribut native des Adapters gespeichert sind. Diese Daten werden verschlüsselt gespeichert und zur Laufzeit des Adapters automatisch entschlüsselt.
Sobald der aktuell verwendete Verschlüsselungsalgorithmus unsicher wird, wird er im js-Controller geändert.
Aktuell verwendeter Verschlüsselungsalgorithmus
- js-controller >= 3.0:
default - js-controller >= 3.2:
aes-192-cbc
Beachten Sie, dass diese Funktion mindestens js-controller 3.0.0 erfordert.
Beispiel:
...
"encryptedNative": [
"password"
],
"native": {
"password": "topSecret"
}
...
Sensible Daten manuell verschlüsseln und entschlüsseln
Wir stellen außerdem Adaptermethoden zur Verfügung, mit denen Sie Daten manuell in Ihrem Code verschlüsseln können.
Verwenden Sie dazu die Methoden adapter.encrypt und adapter.decrypt. Der Schlüssel für die Ver- und Entschlüsselung ist das systemweite, eindeutige Geheimnis der Benutzerinstallation. Wenn Sie stattdessen Ihren eigenen Schlüssel verwenden möchten, übergeben Sie diesen als erstes Argument und den Wert als zweites: encrypt(key, value) / decrypt(key, value). Der Schlüssel ist ein 192-Bit-Schlüssel (24 Byte) und wird als Hexadezimalzeichenkette angegeben.
Beispiel:
// encrypt data using users unique secret
const encryptedContent = adapter.encrypt('super secret message');
const decryptedContent = adapter.decrypt(encryptedContent);
// decryptedContent === 'super secret message'
// Or use your own 192 bit (24 byte) key, given as a hex string
const crypto = require('crypto');
const key = crypto.randomBytes(24).toString('hex');
const encryptedWithOwnKey = adapter.encrypt(key, 'super secret message');
const decryptedWithOwnKey = adapter.decrypt(key, encryptedWithOwnKey);
// decryptedWithOwnKey === 'super secret message'