1

现在在我的生产环境中,我有我的密钥硬编码:

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

将密钥移动到配置文件是个坏主意,把它放在这里更糟糕。

存储和使用 SymmetricSecurityKey 的最佳方式是什么?

谢谢

4

2 回答 2

1

您可以将它们存储在环境变量中,也可以使用 Visual Studio 中的秘密存储。你可以在这里阅读。为不同的环境使用不同的密钥,例如用于本地开发的密钥和在 CI 中配置的用于生产的密钥。(如果您使用 CI,请查看文档以了解如何处理机密,例如在 GitLab 中,您可以在此处阅读相关内容。)

环境变量

环境变量用于避免在代码或本地配置文件中存储应用程序机密。环境变量会覆盖所有先前指定的配置源的配置值。

考虑一个启用了个人用户帐户安全性的 ASP.NET Core Web 应用程序。默认数据库连接字符串包含在项目的 appsettings.json 文件中,其键为 DefaultConnection。默认连接字符串用于 LocalDB,它在用户模式下运行并且不需要密码。在应用部署期间,可以使用环境变量的值覆盖 DefaultConnection 键值。环境变量可以存储带有敏感凭证的完整连接字符串。

警告

环境变量通常存储在纯文本中,未加密。如果机器或进程受到威胁,不受信任的各方可以访问环境变量。可能需要采取其他措施来防止泄露用户机密。

秘密管理工具

Secret Manager 工具在 ASP.NET Core 项目的开发过程中存储敏感数据。在这种情况下,一条敏感数据就是一个应用程序机密。应用程序机密存储在与项目树不同的位置。应用程序机密与特定项目相关联或在多个项目之间共享。应用机密不会签入源代码管理。

警告

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

于 2019-11-25T08:24:14.140 回答
1

最佳做法是将您的秘密存储在环境变量中。

视窗:

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");
于 2019-11-25T08:15:12.257 回答