javascript - 在 Node.js 应用程序中存储 Active Directory 凭据的位置
问题描述
我对 node.js 还是很陌生,并被要求创建一个应用程序(网站),用户可以在其中使用具有提升权限的 AD 帐户登录。然后,应用程序的目标是使用这些提升的凭据启动不同的 PowerShell 脚本和其他工具。
在网上搜索后,我们似乎需要以下包:
- jwt和/或jsonwebtoken:允许我们查看用户是否是他所说的那个人
- activedirectory:能够与 AD 通信
- 护照或护照-jwt
将and存储在. username
_ 令牌应该保持轻量级,并且只保存 AD 用户的唯一标识符(我猜这可能是他的)。password
jsonwebtoken
DistinguishedName
我的问题:用户的 AD 密码存储在哪里?如果它不能在 中jsonwebtoken
,那么唯一剩下的地方可能是数据库?这是这样做的安全方式吗?如果数据库遭到破坏,它似乎也不安全。
如果数据库存储了 AD 密码,我们将需要在用户每次触发 PowerShell 脚本时请求一个 AD 凭证对象。将完整的 AD 凭据对象存储在数据库中而不只是 AD 密码会更好吗?
我可能会使事情过于复杂,但感谢您为我澄清这一点。
解决方案
使用 NodeJs 内部加密库的解决方案
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()
值以及密码短语。
这将确保在数据库中或通过传输/线路时的安全问题。
推荐阅读
- python - 无法在 Windows 上运行 Python Django Oscar 沙盒网站
- java - 每当单击按钮时,多次在屏幕上放置相同的图像
- powerbi - Power BI 持续时间筛选器的小时分钟和秒
- python - 如何使用长时间运行的插槽保持 UI 响应
- amazon-web-services - 如何以 s3 为后端启动一个新的 terraform 项目
- mysql - 如何计算mysql中最连续的重复数据
- java - don't show the latest post at the top
- android - Android : clickable Image horizontal slider using kotlin
- javascript - how to display mutiple autocomplete value in a textbox after a successful ajax
- javascript - Three.js Importing gltf without a background