azure - 无法向 Azure KeyVault 进行身份验证时,如何识别“第一方服务”是什么?
问题描述
尽管进行了数小时的故障排除,我仍无法让 Visual Studio 对 Azure KeyVault 进行身份验证。无论我尝试什么,我都会收到以下无用的错误:
服务请求失败。状态:403(禁止)
内容:{"error":{"code":"Forbidden","message":"拒绝访问第一方服务。\r\n调用者:name=from-infra;tid=GUID_REDACTED;appid=GUID_REDACTED;iss=https ://sts.windows.net/GUID_REDACTED/\r\nVault: VAULT_NAME;location=westus","innererror":{"code":"AccessDenied"}}}
这里有什么东西(可能是经过编辑的 GUID 值之一)我可以用来确定它遇到问题的“第一方服务”是什么?
我在“Azure 服务身份验证”部分使用我的 MSDN 帐户登录。KeyVault 存在于该 MSDN 帐户中。该 KeyVault 中还有针对我的 MSDN 帐户和我的应用服务的主体 ID 的访问策略。在尝试进行身份验证时,这些似乎完全被忽略了。
这是我一直在尝试使用的基本代码。
var credential = new VisualStudioCredential(new VisualStudioCredentialOptions { TenantId = "GUID from tid in above error" });
// Create a secret client using the DefaultAzureCredential
var client = new SecretClient(new Uri("https://MY_VAULT.vault.azure.net/"), new DefaultAzureCredential());
var secret = client.GetSecret("MySecretId");
我尝试了多个版本的 VisualStudioCredential 和 DefaultAzureCredential。不管我做什么,我都无法摆脱这个“拒绝访问第一方服务”的错误,所以我认为下一步是找出“第一方服务”是什么,因为它似乎不是我的 MSDN帐户也不是我的应用服务。
解决方案
租户 f8cdef31-a31e-4b4a-93e4-5f571e91255a 是定义 Microsoft 第一方应用程序的特殊租户。某些 ARM 和计算方案使用来自此租户的令牌访问 Key Vault,但通常 Key Vault 拒绝来自此租户的令牌,并且它不可供客户使用。
您应该使用的租户是当您查看 Azure 门户中的“Azure Active Directory”部分时显示在“租户 ID”下的租户。个人账户,例如outlook.com账户,如果不指定自己的租户ID,则可以获得第一方租户颁发的令牌。组织帐户根据与租户关联的已验证域从其主租户获取令牌,因此它们通常不需要明确指定租户 ID。
推荐阅读
- snowflake-cloud-data-platform - snowsql客户端出现sql执行错误如何解决?
- html - 选中复选框时如何将标签更改为更粗体?
- swift - 在 FBSDK 的设置类中找不到 setAdvertiserTrackingEnabled?
- java - 如何在具有自动保存功能的网站上设计 api 端点?
- ruby-on-rails - 使用 BUNDLE_FROZEN
- git - 隔离的“语义发布”docker 容器可以工作,但在 GitLab CI 中需要 40 分钟
- android - Firebase 没有从孩子那里提取信息
- reactjs - 如何将后端(嵌套)文件中的 multer 图像放到我的前端(反应)上?
- java - java为数据类创建时间范围属性
- powershell - 管道元素 Powershell 中的“,”后缺少表达式