Azure KeyVault 抛出 401 未经授权的错误,但响应仍然具有 200 状态和正确的数据

问题描述 投票:0回答:2

我仅使用此组织目录中的帐户(仅限默认目录 - 单个租户) 将名为 TestApp1 的应用程序注册到 azure Active Directory,并且没有重定向 URI。 除了应用程序之外,我还创建了一个应用程序密钥。

后来我创建了一个名为

KVtest 的 Azure Key Vault 并创建了一个证书。

然后我转到

KVtest Access Control (IAM) 选项,并向我的 TestApp1 添加了 contributor 角色。 之后,我转到访问策略选项并添加了一个带有模板密钥、秘密和证书管理的策略,并选择为主体我的TestApp1

现在我正在使用以下内容测试此 Azure 配置:

const string certificate = "testCertificate"; var myKeyVaultName = "KVtest"; var kvUri = $"https://KVtest.vault.azure.net/"; string clientId = ConfigurationManager.AppSettings["ClientId"]; string clientSecret = ConfigurationManager.AppSettings["ClientSecret"]; string tenantId = ConfigurationManager.AppSettings["AzureTenantId"]; var clientSecretCred = new ClientSecretCredential(tenantId, clientId, clientSecret); var certClient = new CertificateClient(new Uri(kvUri), clientSecretCred); var AZcertificate = certClient.GetCertificate(certificate);
最后一行抛出 

401(未经授权)异常,但是当我继续逐步调试时,存储在 AZcertificate 中的值具有状态为 200 且数据正确的 Azure.Response 对象。

这是正确的行为吗? 这是 azure 配置错误吗?

使用的Nuget包:

c# azure azure-keyvault
2个回答
4
投票
据我所知,出现

401

 错误的原因是在 Key Vault 资源 URI 末尾使用 
尾部斜杠

var kvUri = $"https://KVtest.vault.azure.net/";
其他资源 URI 可以使用或不使用尾部斜杠,但 Key Vault 资源 URI 不能使用它。

要解决此问题,请尝试删除尾部斜杠,如下所示:

var kvUri = $"https://KVtest.vault.azure.net";
出现 401 未经授权错误的其他原因是:

  1. 缺少访问令牌:确保客户端是否在向 Key Vault 发出每个请求时都发送访问令牌,否则将拒绝该请求并出现 401

     错误。

  2. 错误令牌:如果令牌过期、无效或不正确的资源 URI,则会导致 401

     错误。

欲了解更多详细信息,请参考以下链接(如果有帮助):

AZ身份| Azure Key Vault OAuth 资源值:https://vault.azure.net(无斜杠!)

AZ身份| Key Vault 客户端:为什么我会看到 HTTP 401?


0
投票
但是,如果您有过期的令牌、不正确或无效的资源 URI,则有效负载不应具有有效值。我已经看到了同样的行为,并且它只发生在第一次调用密钥保管库时,并且检索到的秘密并不重要。我遇到了同样的问题,但就我而言,没有尾随斜杠,但显示了 401,有效负载是正确的。

© www.soinside.com 2019 - 2024. All rights reserved.