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

VB.NET中Secret Manager基础用法及两类技术问题咨询

问题一解答
  • 直接将常量硬编码进DLL或Windows窗体EXE的情况,仍然会导致敏感信息暴露:编译后的二进制文件里,硬编码的字符串会以明文形式存储,用文本编辑器、十六进制查看器或者反编译工具(比如ILSpy、dnSpy)都能轻松读取到这些内容,这个风险至今存在。
  • 不是必须使用Secret Manager,但它是.NET本地开发阶段推荐的敏感信息存储方式:如果硬编码敏感参数(比如Twilio的SID和Token),不仅会在二进制中暴露,还容易不小心提交到代码仓库。Secret Manager能将敏感信息存在本地用户目录的独立文件中,不会被编译进程序集,也不会被版本控制工具追踪。生产环境则需要用更安全的方案,比如Windows凭据管理器、环境变量或云密钥管理服务,Secret Manager不适合生产环境。
问题二解答

针对.NET类库(DLL)和独立Windows窗体可执行程序,AddUserSecrets的参数选择分两种场景:

1. 针对.NET类库(DLL)

类库没有像Web项目那样的Startup类,你可以自己定义一个空标记类来关联用户密钥,步骤如下:

  • 首先在类库中添加一个空类(仅用于标记密钥关联):
Public Class SecretsMarker
    ' 无需任何代码,仅作为User Secrets的关联标记
End Class
  • 修改你的方法,传入这个标记类的泛型参数:
Private Function getTwilioParam(paramName As String) As String
    Dim result As String = "getTwilioParam Failed"
    Dim builder As New ConfigurationBuilder()
    ' 传入标记类来关联用户密钥
    builder.AddUserSecrets(Of SecretsMarker)()
    Dim configuration As IConfigurationRoot = builder.Build()

    ' 优化判断逻辑用Select Case更简洁
    Select Case paramName
        Case "acctSID"
            result = configuration("Twilio:acctSID")
        Case "authToken"
            result = configuration("Twilio:authToken")
    End Select

    Return result
End Function

2. 针对独立Windows窗体可执行程序

可以直接传入主程序集的入口类型(比如你的主窗体类),或者直接获取程序集对象:

  • 方法一:用主窗体类作为泛型参数(假设你的主窗体是Form1):
builder.AddUserSecrets(Of Form1)()
  • 方法二:直接获取当前执行的程序集:
builder.AddUserSecrets(System.Reflection.Assembly.GetEntryAssembly())

额外注意事项

  • 使用User Secrets前,需要先在Visual Studio中启用:右键项目 → 管理用户机密,这会自动生成secrets.json文件,你需要在该文件中添加Twilio配置:
{
  "Twilio": {
    "acctSID": "你的Twilio账号SID",
    "authToken": "你的Twilio认证Token"
  }
}
  • User Secrets仅适用于本地开发环境,它存储在用户目录的明文文件中,不能用于生产环境的敏感信息存储。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 17:37:03