You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET Core 7 WebApi如何避免Serilog连接字符串明文存储?

解决方案:Azure WebApi中Serilog连接字符串的安全管理

一、避免连接字符串明文存储的可行方案

  • 使用Azure App Service内置配置:在Azure门户的App Service资源中,进入「配置」→「应用程序设置」或「连接字符串」,直接添加Azure Table Storage连接字符串。部署后这些值会自动注入应用环境变量,无需在appsettings.json中明文存储。
  • 利用Azure App Configuration:你已在这里配置了连接字符串,这本身就是替代明文存储的安全方案,直接从这里读取即可(下文会讲具体实现)。
  • 使用Azure Key Vault:若需要更高安全级别,可将连接字符串存入Key Vault,再通过App Configuration或直接在应用中引用密钥,彻底避免敏感信息出现在配置文件中。

二、从Azure App Configuration读取连接字符串配置Serilog

1. 配置应用加载Azure App Configuration

在Program.cs中先添加Azure App Configuration的配置源:

var builder = WebApplication.CreateBuilder(args);

// 添加Azure App Configuration配置源
builder.Configuration.AddAzureAppConfiguration(options =>
{
    options.Connect("<你的App Configuration连接字符串>")
           // 若配置中引用了Key Vault密钥,需添加Key Vault访问配置
           .ConfigureKeyVault(kv =>
           {
               kv.SetCredential(new DefaultAzureCredential());
           });
});

提示:<你的App Configuration连接字符串>可通过Azure App Service的应用程序设置注入,避免硬编码。

2. 读取配置并初始化Serilog

在配置Serilog时,直接从已加载的配置中获取连接字符串:

builder.Host.UseSerilog((context, config) =>
{
    config.ReadFrom.Configuration(context.Configuration)
          .WriteTo.AzureTableStorage(
              context.Configuration["AzureTableStorage:ConnectionString"],
              storageTableName: "Logs" // 替换为你的日志表名
          );
});

3. 清理明文配置

删除appsettings.json中关于Azure Table Storage连接字符串的明文配置项,确保敏感信息不再出现在代码仓库或本地配置文件中。

额外注意事项

  • 确保Azure App Service的托管标识拥有访问Azure App Configuration的权限,避免出现读取失败的权限错误。
  • 若使用Key Vault存储连接字符串,需给App Service的托管标识分配Key Vault的「机密读取者」角色。

内容的提问来源于stack exchange,提问作者skysurfer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 01:22:39