Visual Studio 中的 Azure 服务总线托管标识返回 401 - 令牌颁发者无效
Azure Service Bus managed identity in Visual Studio returning 401 - Token issuer is invalid
我正在尝试使用代码中的托管标识访问 Azure 服务总线。目前我只是在本地尝试这个。
调试代码时出现以下错误
System.UnauthorizedAccessException: Put token failed. status-code: 401, status-description: InvalidIssuer: Token issuer is invalid
这是我的服务总线实例
这是我的用户Azure Service Bus Data Owner
权限
这是我的代码
_client = new ServiceBusClient("oconnorevents.servicebus.windows.net", new DefaultAzureCredential());
我作为添加到服务总线的同一用户登录 Visual Studio。我也尝试通过 CLI 登录,但没有帮助。
我哪里错了?
我最近看过这个类似的问题,但提出的解决方案对我不起作用。
如果您使用 DefaultAzureCredential
进行身份验证,它将尝试几种凭证类型进行身份验证,如前所述 here, one of them is VisualStudioCredential
,但它会向登录 VS 的用户的主 AAD 租户进行身份验证,在您的在这种情况下,我假设服务总线处于不在用户家庭租户下的订阅中。
我也可以在我这边重现你的问题。
直接使用VisualStudioCredential
,然后通过VisualStudioCredentialOptions
指定TenantId
即可解决问题。
样本:
要找到 TenantId
,只需导航到Azure Active Directory
,您的服务总线的订阅位于。
TokenCredential tokenCredential = new VisualStudioCredential(new VisualStudioCredentialOptions {TenantId = "xxxxxxx" });
ServiceBusClient client = new ServiceBusClient("xxx.servicebus.windows.net", tokenCredential);
由于我可以访问多个不同的租户,Visual Studio 有时会感到困惑。处理此问题的另一种方法是继续使用 DefaultAzureCredential,但要提示 Visual Studio 使用哪个租户。
首先左键单击您的项目并检查属性,然后:
- 左键单击“调试”
- 左键单击“添加”按钮添加环境变量
- 名称使用“AZURE_TENANT_ID”,值使用您的租户 ID。是的,那是图片中的假租户 ID :-)
参考
通过将以下键添加到 local.settings.json 来指定确切的租户 ID。
"AZURE_TENANT_ID": "your tenant id"
我尝试创建一个 azure 函数,它使用托管身份触发器从服务总线队列接收消息,它对我有用。
我正在尝试使用代码中的托管标识访问 Azure 服务总线。目前我只是在本地尝试这个。
调试代码时出现以下错误
System.UnauthorizedAccessException: Put token failed. status-code: 401, status-description: InvalidIssuer: Token issuer is invalid
这是我的服务总线实例
这是我的用户Azure Service Bus Data Owner
权限
这是我的代码
_client = new ServiceBusClient("oconnorevents.servicebus.windows.net", new DefaultAzureCredential());
我作为添加到服务总线的同一用户登录 Visual Studio。我也尝试通过 CLI 登录,但没有帮助。
我哪里错了?
我最近看过这个类似的问题
如果您使用 DefaultAzureCredential
进行身份验证,它将尝试几种凭证类型进行身份验证,如前所述 here, one of them is VisualStudioCredential
,但它会向登录 VS 的用户的主 AAD 租户进行身份验证,在您的在这种情况下,我假设服务总线处于不在用户家庭租户下的订阅中。
我也可以在我这边重现你的问题。
直接使用VisualStudioCredential
,然后通过VisualStudioCredentialOptions
指定TenantId
即可解决问题。
样本:
要找到 TenantId
,只需导航到Azure Active Directory
,您的服务总线的订阅位于。
TokenCredential tokenCredential = new VisualStudioCredential(new VisualStudioCredentialOptions {TenantId = "xxxxxxx" });
ServiceBusClient client = new ServiceBusClient("xxx.servicebus.windows.net", tokenCredential);
由于我可以访问多个不同的租户,Visual Studio 有时会感到困惑。处理此问题的另一种方法是继续使用 DefaultAzureCredential,但要提示 Visual Studio 使用哪个租户。
- 左键单击“调试”
- 左键单击“添加”按钮添加环境变量
- 名称使用“AZURE_TENANT_ID”,值使用您的租户 ID。是的,那是图片中的假租户 ID :-)
参考
通过将以下键添加到 local.settings.json 来指定确切的租户 ID。
"AZURE_TENANT_ID": "your tenant id"
我尝试创建一个 azure 函数,它使用托管身份触发器从服务总线队列接收消息,它对我有用。