如何在C# ASP.NET Core 6.0中避免代码存储凭据并配置API安全?
解决API认证配置与凭据安全问题
一、appsettings.json凭据隐藏方案
- 绝对不要在
appsettings.json里明文存储密码等敏感信息,不管是本地开发还是发布到Azure环境。 - 移除appsettings里的明文密码后,推荐用Azure Key Vault托管敏感凭据:
- 在Azure Portal创建Key Vault实例,将API密码、数据库连接字符串等机密存入。
- 给Azure Web App分配托管标识(Managed Identity),并赋予该标识访问Key Vault的权限,无需额外密钥。
- 修改
appsettings.json,用Key Vault引用替换明文内容,格式示例:"ConnectionStrings": { "YourDbConnection": "@Microsoft.KeyVault(SecretUri=https://your-vault-name.vault.azure.net/secrets/your-db-secret/)" }
- 本地开发时,用
appsettings.Development.json或**用户机密(User Secrets)**存储敏感信息,避免提交到代码仓库:
打开终端执行命令:dotnet user-secrets init dotnet user-secrets set "ConnectionStrings:YourDbConnection" "your-local-secret-value"
二、API访问限制的认证配置
要限制API访问,推荐两种实用方案:
1. Azure AD认证(适合企业级或OAuth场景)
- 在Azure Portal注册App Registration,配置API访问范围。
- 在Web App的「Authentication」面板启用Azure AD登录,设置为「Require authentication」。
- 在ASP.NET Core代码中添加认证中间件:
builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme) .AddMicrosoftIdentityWebApi(builder.Configuration.GetSection("AzureAd")); app.UseAuthentication(); app.UseAuthorization(); - 给需要保护的API控制器/方法加上
[Authorize]特性:[ApiController] [Route("api/[controller]")] [Authorize] public class ProtectedController : ControllerBase { // 你的API业务逻辑 }
2. API密钥认证(适合简单场景)
- 将API密钥存入Azure Key Vault,在Web App的「Configuration」面板添加应用设置
ApiKey。 - 编写自定义认证过滤器验证请求头中的API密钥:
public class ApiKeyAuthFilter : IAuthorizationFilter { private readonly IConfiguration _config; public ApiKeyAuthFilter(IConfiguration config) { _config = config; } public void OnAuthorization(AuthorizationFilterContext context) { if (!context.HttpContext.Request.Headers.TryGetValue("X-Api-Key", out var apiKey)) { context.Result = new UnauthorizedResult(); return; } var validKey = _config["ApiKey"]; if (!string.Equals(apiKey, validKey, StringComparison.OrdinalIgnoreCase)) { context.Result = new UnauthorizedResult(); } } } - 在需要保护的控制器上添加
[TypeFilter(typeof(ApiKeyAuthFilter))]特性。
三、发布后的验证步骤
- 发布Web App后,检查Azure Portal的「Configuration」面板,确认敏感凭据通过Key Vault或应用设置加载,无明文暴露。
- 测试API:
- 未携带有效认证信息时,返回401 Unauthorized。
- 携带正确认证信息时,可正常访问API资源。
内容的提问来源于stack exchange,提问作者Thabang Benny Kwinana
相关产品推荐
相关产品推荐

