Функции безопасности для разработчиков адаптеров

Предотвращение доступа к конфиденциальным данным со стороны других адаптеров

Если вам необходимо хранить пароль пользователя или токен, предоставляющий пользователям доступ к вашей услуге, в интересах пользователя может быть предотвратить доступ к этой информации со стороны сторонних адаптеров. Для этого можно добавить поле protectedNative в файл io-package.json. Это поле должно содержать массив всех атрибутов, хранящихся в атрибуте native адаптера, который будет защищен.

Обратите внимание, что адаптеры admin, cloud и iot всегда будут иметь доступ к защищенным атрибутам. Адаптеру admin этот доступ необходим для того, чтобы пользователи могли читать атрибуты на собственной странице конфигурации адаптера и вручную редактировать защищенные поля в system.adapter.<namespace>.<instance>.

Пример:

...
"protectedNative": [
    "password"
],
"native": {
  "password": "topSecret"
}
...

Автоматическое шифрование и расшифровка конфиденциальных данных

Если вам необходимо хранить пароль пользователя или токен, предоставляющий пользователям доступ к предоставляемой вами услуге, в интересах пользователя может быть не хранить эту конфиденциальную информацию в открытом виде. Для этого вы можете добавить поле encryptedNative в файл io-package.json. Это поле должно содержать массив всех атрибутов, хранящихся в атрибуте native адаптера, которые будут храниться в зашифрованном виде и автоматически расшифровываться во время работы адаптера.

Всякий раз, когда используемый в данный момент алгоритм шифрования становится небезопасным, он будет изменен в js-контроллере.

Используемый в настоящее время алгоритм шифрования

  • js-controller >= 3.0: default
  • js-controller >= 3.2: aes-192-cbc

Обратите внимание, что для работы этой функции требуется как минимум js-controller версии 3.0.0.

Пример:

...
"encryptedNative": [
    "password"
],
"native": {
  "password": "topSecret"
}
...

Ручное шифрование и расшифровка конфиденциальных данных

Мы также предоставляем методы-адаптеры для ручного шифрования данных в вашем коде. Для этого вы можете использовать методы adapter.encrypt и adapter.decrypt. Ключ, используемый для шифрования и дешифрования, — это уникальный системный секрет установки пользователя. Если вы хотите использовать свой собственный ключ, передайте его в качестве первого аргумента, а значение — в качестве второго: encrypt(key, value) / decrypt(key, value). Ключ представляет собой 192-битный (24-байтовый) ключ, заданный в виде шестнадцатеричной строки.

Пример:

// 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'