现在在我的生产环境中,我有我的密钥硬编码:
new SigningCredentials(new SymmetricSecurityKey("my jey bla bla"), SecurityAlgorithms.HmacSha256Signature);
将密钥移动到配置文件是个坏主意,把它放在这里更糟糕。
存储和使用 SymmetricSecurityKey 的最佳方式是什么?
谢谢
现在在我的生产环境中,我有我的密钥硬编码:
new SigningCredentials(new SymmetricSecurityKey("my jey bla bla"), SecurityAlgorithms.HmacSha256Signature);
将密钥移动到配置文件是个坏主意,把它放在这里更糟糕。
存储和使用 SymmetricSecurityKey 的最佳方式是什么?
谢谢
您可以将它们存储在环境变量中,也可以使用 Visual Studio 中的秘密存储。你可以在这里阅读。为不同的环境使用不同的密钥,例如用于本地开发的密钥和在 CI 中配置的用于生产的密钥。(如果您使用 CI,请查看文档以了解如何处理机密,例如在 GitLab 中,您可以在此处阅读相关内容。)
环境变量
环境变量用于避免在代码或本地配置文件中存储应用程序机密。环境变量会覆盖所有先前指定的配置源的配置值。
考虑一个启用了个人用户帐户安全性的 ASP.NET Core Web 应用程序。默认数据库连接字符串包含在项目的 appsettings.json 文件中,其键为 DefaultConnection。默认连接字符串用于 LocalDB,它在用户模式下运行并且不需要密码。在应用部署期间,可以使用环境变量的值覆盖 DefaultConnection 键值。环境变量可以存储带有敏感凭证的完整连接字符串。
警告
环境变量通常存储在纯文本中,未加密。如果机器或进程受到威胁,不受信任的各方可以访问环境变量。可能需要采取其他措施来防止泄露用户机密。
秘密管理工具
Secret Manager 工具在 ASP.NET Core 项目的开发过程中存储敏感数据。在这种情况下,一条敏感数据就是一个应用程序机密。应用程序机密存储在与项目树不同的位置。应用程序机密与特定项目相关联或在多个项目之间共享。应用机密不会签入源代码管理。
警告
Secret Manager 工具不会对存储的机密进行加密,不应将其视为受信任的存储。它仅用于开发目的。键和值存储在用户配置文件目录中的 JSON 配置文件中。
最佳做法是将您的秘密存储在环境变量中。
视窗:
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");