0

我很难让 Kerberos Auth 使用 VaultSharp 与 Vault 一起工作。

我无法控制 Vault 服务器,但我被告知它已配置并可以使用。

我正在使用在 IIS 中运行的 .NET,并且我想使用 IIS 运行的服务帐户,这样我就不需要存储其他机密或用户/密码。

这是我正在使用的代码和错误:

public string GetSecretWithKerberosAuthUsingVaultSharp(string keyName, string vaultBaseAddress, string vaultResourcePath, string mountPoint)
{
    IAuthMethodInfo authMethod = new KerberosAuthMethodInfo(); // uses network credential by default.
    var vaultClientSettings = new VaultClientSettings(vaultBaseAddress, authMethod);
    IVaultClient vaultClient = new VaultClient(vaultClientSettings);

    var result = vaultClient.V1.Secrets.KeyValue.V2.ReadSecretAsync(vaultResourcePath, mountPoint: mountPoint).Result;
    //Above line gives this error message:
    //{"request_id":"a85dfbb3-b283-3513-7cd3-01ad757eed1b","lease_id":"","renewable":false,"lease_duration":0,"data":null,"wrap_info":null,"warnings":["Unauthorised.\n\n"],"auth":null}

    var resultData = result.Data;
    string secret = resultData.Data[keyName].ToString();

    return secret;
}

我已经设法使用令牌身份验证以及通过 CLI 让它工作,但这并不是我想要的。

authMethod.Credentials.UserName/Domain两者都是空字符串。不知道在这种情况下是否应该填充它们,但文档指出它“默认使用网络凭据”

任何帮助表示赞赏。

4

1 回答 1

0

您的 Web 应用程序是否在集成的 Windows 身份验证模式下运行,并且禁用了匿名身份验证?

如果不是,请使其在该模式下运行,以使您的 Web 应用程序具有 Windows 集成身份验证上下文,以便从 VaultSharp 到 Vault API 的 Web 调用可以具有安全上下文。

如果是,那么您可以尝试几件事吗?

var kerberosAuthInfo = new KerberosAuthMethodInfo(CredentialCache.DefaultCredentials);

如果上述方法不起作用,那么您可以尝试显式凭据。

var kerberosAuthInfo = new KerberosAuthMethodInfo(new NetworkCredential(userName, password, domain));

理想情况下,Web 应用程序上下文应该携带集成的 Windows 上下文,这样您就不需要提供显式凭据,但可能值得尝试确保它首先工作,然后我们可以回溯为什么没有传递上下文.

于 2020-12-06T09:03:22.880 回答