0

我在项目中使用 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 凭据管理器(但我认为这将返回错误而不仅仅是空字符串)。

如果有人能指出我正确的方向,或者有任何建议让我尝试,我会全力以赴。

4

1 回答 1

0

正如@richard-deeming 指出的那样,这是因为运行应用程序的用户无权访问存储的凭据,因为它们存储在与运行服务的帐户不同的帐户下。查看他的评论以获取更多详细信息。

于 2022-02-03T18:18:09.340 回答