如何将API密钥等敏感信息排除在GitHub外,同时完成应用部署?
问题解答
1. 发布控制台应用时,Secrets会不会被一同发布?
不会。.NET的用户机密(Secrets)是存储在用户本地目录的独立文件中,不在你的项目代码文件夹内。发布应用时只会打包项目目录下的文件,因此Secrets不会被包含在发布包中,不用担心敏感信息泄露。
2. 如何将密钥部署到服务器?
根据服务器环境,推荐几种实用方案:
- 服务器配置用户机密:
找到服务器上运行控制台应用的用户对应目录:- Windows:
C:\Users\<用户名>\AppData\Roaming\Microsoft\UserSecrets\<项目UserSecretsId> - Linux/macOS:
~/.microsoft/usersecrets/<项目UserSecretsId>
在该目录下创建secrets.json,填入你的API密钥,格式和本地Secrets一致。项目的UserSecretsId可在控制台项目的.csproj文件中找到。
- Windows:
- 使用环境变量:
在服务器系统中设置环境变量(比如OPENWEATHERMAP_KEY、GOOGLE_TTS_KEY、OPENAI_KEY),代码里通过Environment.GetEnvironmentVariable("变量名")读取即可。这种方法无需维护配置文件,适合云服务器或Linux系统。 - 自定义生产配置文件:
在控制台项目中添加appsettings.production.json并写入密钥信息,然后在.gitignore中排除这个文件。部署时手动将该文件上传到服务器应用目录,.NET默认会加载对应环境的配置文件。
3. 如何排除敏感信息同时展示数据结构?
可以通过以下方式让使用者清楚配置要求,同时保护你的密钥:
- 提交示例配置文件:
在项目中添加appsettings.example.json(或secrets.example.json),只保留密钥的键,值用占位符代替,比如:
在README里说明:复制该示例文件,重命名为{ "OpenWeatherMapApiKey": "替换为你的OpenWeatherMap密钥", "GoogleTtsApiKey": "替换为你的Google TTS密钥", "OpenAiApiKey": "替换为你的OpenAI密钥" }appsettings.json(或对应配置文件),填入自己的密钥。 - 在文档中列出需要配置的密钥项:
如果用用户机密,在README里告知使用者需要设置的密钥名称,示例命令:dotnet user-secrets set "OpenWeatherMapApiKey" "你的密钥" dotnet user-secrets set "GoogleTtsApiKey" "你的密钥" dotnet user-secrets set "OpenAiApiKey" "你的密钥" - 完善.gitignore规则:
确保.gitignore中包含所有可能存放敏感信息的文件,比如appsettings.json、*.user等,避免误提交。
另外,你的类库项目只负责共享类、Web应用仅读取文件路径的拆分逻辑很合理,能进一步降低敏感信息暴露的风险。
内容的提问来源于stack exchange,提问作者Wim ten Brink
相关产品推荐
相关产品推荐

