我在项目中使用 Windows 凭据管理器时遇到问题。我正在使用它来替换我的 appsettings 中 connectionString 上的用户名和密码,在开发和 QA 环境中一切正常,但在生产环境(我没有完全访问权限)中却不行。问题是当我从目标加载凭据时它返回空字符串。
这是我加载它的地方:
public static CredentialModel GetCredential(string target)
{
CredentialModel credentialDto = new CredentialModel();
using var credential = new Credential
{
Target = target
};
credential.Load();
credentialDto.UserName = credential.Username;
credentialDto.Password = credential.Password;
return credentialDto;
}
这是 CredentialModel
public class CredentialModel
{
public string UserName { get; set; }
public string Password { get; set; }
}
我在哪里替换connectionString中的凭据:
StringBuilder connectionString = new(host.Configuration.GetConnectionString("RemessasConnectionString"));
var credential = CredentialService.GetCredential("Pegasus");
connectionString.Replace("$userId", credential.UserName);
connectionString.Replace("$password", credential.Password);
ConnectionString = connectionString.ToString();
为了调试的缘故,我在日志中添加了一行,以查看添加到 connectionString 中的内容,并在生产中将其替换为空字符串,但在开发中使用实际值。
我对此原因有一个想法,该应用程序正在与 Windows 用户一起运行,并且该用户无权访问生产服务器中的 Windows 凭据管理器(但我认为这将返回错误而不仅仅是空字符串)。
如果有人能指出我正确的方向,或者有任何建议让我尝试,我会全力以赴。