我仅使用此组织目录中的帐户(仅限默认目录 - 单个租户) 将名为 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包:
401
错误的原因是在 Key Vault 资源 URI 末尾使用尾部斜杠
var kvUri = $"https://KVtest.vault.azure.net/";
其他资源 URI 可以使用或不使用尾部斜杠,但 Key Vault 资源 URI 不能使用它。
要解决此问题,请尝试删除尾部斜杠,如下所示:
var kvUri = $"https://KVtest.vault.azure.net";
出现 401 未经授权错误的其他原因是:缺少访问令牌:确保客户端是否在向 Key Vault 发出每个请求时都发送访问令牌,否则将拒绝该请求并出现 401
错误。
错误令牌:如果令牌过期、无效或不正确的资源 URI,则会导致 401
错误。
欲了解更多详细信息,请参考以下链接(如果有帮助):
AZ身份| Azure Key Vault OAuth 资源值:https://vault.azure.net(无斜杠!)