KeyVaultClient 通过客户端库使用 GetSecretAsync 发出单个请求会生成对 Key Vault 的额外调用

KeyVaultClient making a single request using GetSecretAsync via the client library generates an additional call to Key Vault

我们在 Service Fabric 中的一个应用程序上使用 KeyVaultClient 库,该应用程序调用 Key Vault 来读取作为机密存储的各种配置数据。代码向保管库进行身份验证的方式是通过具有 SSL 证书的 AAD 主体。该代码正在创建单个请求,但是当我们查看 Key Vault 日志时,对于代码创建的每个单个请求,保险库都会被命中两次。第一次点击生成 401 Unauthorized,然后第二个请求成功。

似乎图书馆可能首先尝试在没有我们请求中的凭据的情况下访问 Key Vault,然后再继续我们创建的请求。第二个请求完全按预期工作。这似乎是不必要的。有没有人有过类似的经历?

这是预期的行为。 Azure Keyvault 具有一种身份验证模式,该模式将始终对保管库进行至少一次未经身份验证的调用。这是因为某些保险库要求使用 HSM 保护的密钥对发送给它们的消息进行加密。此信息在第一次未经身份验证的调用的身份验证质询中返回。

因此,每次您向该过程中尚未连接的保险库发送请求时,sdk 首先发送带有空 body 且没有授权的请求 header.这将导致 401,其中将包含身份验证和消息协议信息。

更多的细节可以参考类似的issue.