代码之家  ›  专栏  ›  技术社区  ›  DarkLite1

在Node.js应用程序中存储活动目录凭据的位置

  •  0
  • DarkLite1  · 技术社区  · 5 年前

    我是node.js的新手,我被要求创建一个应用程序(网站),用户可以使用提升权限的广告帐户登录。应用程序的目标是使用这些提升的凭据启动不同的PowerShell脚本和其他工具。

    在搜索网页之后,我们似乎需要以下软件包:

    not a good idea 储存 username password jsonwebtoken . 令牌应该保持轻量级,并且只为广告用户保存一个唯一的标识符(这可能是他的 DistinguishedName

    我的问题:用户的广告密码存储在哪里?如果它不能在 ,只剩下一个数据库了?这是安全的方法吗?如果数据库被破坏,看起来也不安全。

    如果数据库存储了广告密码,则每次用户启动PowerShell脚本时,我们都需要请求一个广告凭据对象。最好在数据库中存储完整的AD凭据对象,而不仅仅是AD密码吗?

    我可能把事情搞得太复杂了,但谢谢你为我澄清这一点。

    0 回复  |  直到 5 年前
        1
  •  3
  •   kn_pavan    5 年前

    使用NodeJs内部解决方案 Crypto Library

    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() 值和密码短语。

    这将确保数据库中或过境/电汇时的安全问题。

        2
  •  -1
  •   vitalyster    5 年前

    https://github.com/auth0/passport-windowsauth 在第一个示例中,您可能不需要为您的简单用例设置更高级的设置。