CredentialManagement 在生产中返回空字符串,但在开发中不返回

CredentialManagement returning empty strings in production but not development

我在项目中使用 Windows 凭据管理器时遇到问题。我用它来替换我的应用程序设置中 connectionString 上的用户名和密码,在开发和 QA 环境中一切正常,但在生产环境中(我没有完全访问权限)它没有。问题是当我从目标加载凭据时 returning 空字符串。

这是我加载它的地方:

 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 凭据管理器(但我认为这会 return 一个错误,而不仅仅是空字符串)。

如果有人能指出我正确的方向,或者有任何建议让我尝试,我会洗耳恭听。

正如@richard-deeming 指出的那样,这是因为用户 运行 应用程序无权访问存储的凭据,因为它们存储在与 [=13= 不同的帐户下] 服务。查看他的评论了解更多详情。