Где хранить учетные данные Active Directory в приложении Node.js - PullRequest
3 голосов
/ 27 января 2020

Я довольно новичок в node.js, и меня попросили создать приложение (веб-сайт), где пользователи могут войти в систему со своей учетной записью AD, которая имеет повышенные привилегии. Тогда целью приложения будет запуск различных сценариев PowerShell и других инструментов с такими повышенными учетными данными.

После поиска в Интернете нам нужны следующие пакеты:

Кажется, что не очень хорошая идея хранить username и password в полезной нагрузке jsonwebtoken. Предполагается, что токен должен оставаться легковесным и содержать только уникальный идентификатор пользователя AD (это может быть его DistinguishedName, я думаю).

Мои вопросы: Где хранится пароль AD для пользователя? Если это не может быть в jsonwebtoken, единственное место, которое осталось, вероятно, база данных? Это безопасный способ сделать это? Если база данных взломана, она тоже кажется небезопасной.

И если база данных хранит пароль AD, нам нужно будет запрашивать объект учетных данных AD каждый раз, когда пользователь запускает сценарий PowerShell. Было бы лучше хранить в базе данных полный объект учетных данных AD, а не только пароль AD?

Возможно, я слишком усложняю вещи, но спасибо за разъяснение этого для меня.

Ответы [ 2 ]

3 голосов
/ 06 февраля 2020

Решение с использованием NodeJs внутреннего Криптотеки

  1. Создание файлов c public и public key с использованием crypto.generateKeyPairSync(), выбрав вариант шифрования. Пример кода с той же страницы:
const { generateKeyPairSync } = require('crypto');
const { publicKey, privateKey } = generateKeyPairSync('rsa', {
  modulusLength: 4096,
  publicKeyEncoding: {
    type: 'spki',
    format: 'pem'
  },
  privateKeyEncoding: {
    type: 'pkcs8',
    format: 'pem',
    cipher: 'aes-256-cbc',
    passphrase: 'top secret'
  }
});
Используйте crypto.publicEncrypt(key, buffer) в своем коде, чтобы зашифровать пароли и сохранить их в базе данных. При чтении значения используйте crypto.publicDecrypt(key, buffer) для получения исходного значения. Если вы хотите прочитать значения вне вашего кода, используйте значения privateDecrypt() и privateEncrypt() вместе с парольной фразой.

Это обеспечит безопасность при нахождении в базе данных или при транзите / передаче.

0 голосов
/ 10 февраля 2020

Вам вообще не нужно иметь дело с паролями AD, просто поместите приложение узла за IIS, отключите анонимную аутентификацию и включите аутентификацию Windows, все будет работать правильно, и вы сможете запускать скрипты с аутентифицированной идентификацией пользователя , Вы можете взглянуть на https://github.com/auth0/passport-windowsauth в первом примере, вам может не потребоваться более сложная настройка для вашего простого варианта использования.

...