这个想法是用户发送给我一个api-key,我返回他的品牌名称。api键是GUID,所以我不能把它作为秘密名称存储。
我正在寻找一种方法来从密钥库按值检索秘密名称. 这就是我的团队提出的,但它非常缓慢,并且在向密钥库添加新秘密时急剧增加。
public String getClientApiKeyName(final String apiKeyValue) {
for (SecretProperties secretProperties : secretClient.listPropertiesOfSecrets()) {
if (secretProperties.isEnabled()) {
final KeyVaultSecret secretWithValue = secretClient.getSecret(
secretProperties.getName(),
secretProperties.getVersion()
);
if (secretWithValue.getValue().equals(apiKeyValue)) {
return secretWithValue.getName();
}
}
}
return null;
}
Key Vault是为您自己的服务秘密而设计的。如果您正在存储客户的秘密(特别是对于高吞吐量密钥存储场景),请考虑将密钥放入加密的数据库或存储帐户中,并仅将主密钥存储在Azure密钥库中。
节流
如果您看到错误代码429,您应该遵循最佳实践你应该实现:
- 减少每个请求的操作数。
- 减少请求的频率。 避免立即重试。
- 所有请求都将超过您的使用限制。
回退代码示例
SecretClientOptions = new SecretClientOptions(){重试={延迟= TimeSpan.FromSeconds (2),MaxDelay = TimeSpan.FromSeconds(16),MaxRetries = 5,Mode = RetryMode。指数}};var client = new SecretClient(new Uri("https://keyVaultName.vault.azure.net"), new DefaultAzureCredential(),options);//获取秘密
https://learn.microsoft.com/en-us/azure/key-vault/general/overview-throttling