我正在尝试使用代码中的托管标识访问Azure Service Bus。目前我只是在本地尝试此操作。
当我调试代码时,我得到以下错误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登录,但没有帮助。
我到底哪里错了?
我最近也看过类似的问题here,但提出的解决方案对我不起作用。
4条答案
按热度按时间hwamh0ep1#
由于我可以访问几个不同的租户,Visual Studio有时会感到困惑。另一种处理此问题的方法是继续使用DefaultAzureCredential,但向Visual Studio提供有关要使用哪个租户的提示。
x1c 0d1x首先左键单击您的项目并检查属性,然后:
1.左键单击“调试”
1.左键单击“Add”按钮添加环境变量
1.名称使用“AZURE_TENANT_ID”,值使用您的租户ID。是的,图片中的租户ID是假的:-)
参考文献
ttygqcqt2#
如果您使用
DefaultAzureCredential
进行身份验证,它将尝试几种凭据类型进行身份验证,如前面提到的here,其中之一是VisualStudioCredential
,但它将对登录VS的用户的主AAD租户进行身份验证,在您的情况下,我假设服务总线位于订阅中,而该订阅不在用户的主租户下。我也可以在我这边重现你的问题。
要解决这个问题,只需直接使用
VisualStudioCredential
,然后简单地通过VisualStudioCredentialOptions
指定TenantId
,就可以正常工作。要查找
TenantId
,只需导航到您的服务总线订阅所在的Azure Active Directory
。laik7k3q3#
通过向local.settings.json添加以下键来指定确切的租户ID。
我试着创建一个azure函数,它使用托管标识触发器从服务总线队列接收消息,它对我很有效。
omqzjyyz4#
我迟到了,但我得到了我的本地Visual Studio与此代码的工作
此外,请记住在Visual Studio中登录Azure,并将您的帐户分配给角色“Azure服务总线数据发送方”,请参见下文: