首页 > 解决方案 > 在 Node.js 应用程序中存储 Active Directory 凭据的位置

问题描述

我对 node.js 还是很陌生,并被要求创建一个应用程序(网站),用户可以在其中使用具有提升权限的 AD 帐户登录。然后,应用程序的目标是使用这些提升的凭据启动不同的 PowerShell 脚本和其他工具。

在网上搜索后,我们似乎需要以下包:

and存储在. username_ 令牌应该保持轻量级,并且只保存 AD 用户的唯一标识符(我猜这可能是他的)。passwordjsonwebtokenDistinguishedName

我的问题:用户的 AD 密码存储在哪里?如果它不能在 中jsonwebtoken,那么唯一剩下的地方可能是数据库?这是这样做的安全方式吗?如果数据库遭到破坏,它似乎也不安全。

如果数据库存储了 AD 密码,我们将需要在用户每次触发 PowerShell 脚本时请求一个 AD 凭证对象。将完整的 AD 凭据对象存储在数据库中而不只是 AD 密码会更好吗?

我可能会使事情过于复杂,但感谢您为我澄清这一点。

标签: javascriptnode.jsauthenticationactive-directory

解决方案


使用 NodeJs 内部加密库的解决方案

  1. 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'
  }
});
  1. 在您的代码中使用crypto.publicEncrypt(key, buffer)加密密码并将其存储在数据库中。在读回值时使用crypto.publicDecrypt(key, buffer)以获取原始值。
  2. 如果您想读取代码之外的值,请使用privateDecrypt()privateEncrypt()值以及密码短语。

这将确保在数据库中或通过传输/线路时的安全问题。


推荐阅读