.net 您如何保护JWT对称安全密钥?

5sxhfpxr  于 2022-12-20  发布在  .NET
关注(0)|答案(3)|浏览(109)

在我的生产环境中,现在我已经对密钥进行了硬编码:

new SigningCredentials(new SymmetricSecurityKey("my jey bla bla"), SecurityAlgorithms.HmacSha256Signature);

将密钥移动到配置文件是个坏主意,将其放在这里更糟。
存储和使用对称安全密钥的最佳方法是什么?
谢啦,谢啦

41zrol4v

41zrol4v1#

最佳做法是将机密存储在环境变量中。
窗口:

SET JWT_KEY="my jey bla bla"

Linux操作系统:

export JWT_KEY="my jey bla bla"

然后,要在代码中访问它,可以使用System.Environment类。具体来说,Environment.GetEnvironmentVariable方法:

string jwtKey = Environment.GetEnvironmentVariable("JWT_KEY");
oo7oh9g9

oo7oh9g92#

我认为前面给出的两个答案都是错误的。1)环境变量和2)秘密管理器工具都只能在开发中使用。请阅读以下内容:
https://learn.microsoft.com/en-us/aspnet/core/fundamentals/configuration/?view=aspnetcore-7.0#security-and-user-secrets
微软给我们的“唯一”安全选项是Azure Key Vault。恐怕我总是在appsettings.json上设置这些东西,因为这似乎是唯一负担得起的方法。如果有人知道更好的方法,请与我们分享...祝福

kcrjzv8t

kcrjzv8t3#

对于开发环境中的机密,您可以将其存储在环境变量中或使用Visual Studio中的机密存储。您可以read about it here。对于测试、集成或开发,您可以使用CI中可用的机密逻辑。(假设您的CI支持此功能。)(例如,在GitLab中,您可以read about it here。)

环境变量

环境变量用于避免在代码或本地配置文件中存储应用机密。环境变量会重写所有以前指定的配置源的配置值。
考虑一个启用了“个人用户帐户”安全性的ASP.NET核心Web应用。默认数据库连接字符串包含在项目的appsettings.json文件中,键为DefaultConnection。默认连接字符串用于LocalDB,它在用户模式下运行,不需要密码。在应用部署期间,DefaultConnection键值可以被环境变量的值覆盖。环境变量可以存储带有敏感凭据的完整连接字符串。

警告

  • 环境变量通常以未加密的纯文本形式存储。如果计算机或进程受到危害,则不受信任的一方可以访问环境变量。可能需要其他措施来防止泄露用户机密。*
    机密管理器工具

机密管理器工具在开发ASP.NET核心项目期间存储敏感数据。在此上下文中,敏感数据就是应用机密。应用机密存储在与项目树不同的位置。应用机密与特定项目关联或在多个项目之间共享。应用机密不签入源代码管理。

警告

  • Secret Manager工具不会加密存储的机密,不应视为受信任的存储。它仅用于开发目的。密钥和值存储在用户配置文件目录中的JSON配置文件中。*

相关问题