【问题标题】:Azure Service Bus managed identity in Visual Studio returning 401 - Token issuer is invalidVisual Studio 中的 Azure 服务总线托管标识返回 401 - 令牌颁发者无效
【发布时间】:2021-05-24 11:36:29
【问题描述】:

我正在尝试使用我的代码中的托管标识访问 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 登录,但没有帮助。

我哪里错了?

我查看了这个类似的最近问题here,但提出的解决方案对我不起作用。

【问题讨论】:

    标签: azure azureservicebus


    【解决方案1】:

    如果您使用DefaultAzureCredential 进行身份验证,它会尝试使用here 中提到的几种凭据类型进行身份验证,其中之一是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);
    

    【讨论】:

    • 谢谢。它确实适用于具体细节,但我看不出它不能正常工作的原因。我只有 1 个订阅,包括服务总线。
    【解决方案2】:

    由于我可以访问多个不同的租户,Visual Studio 有时会感到困惑。解决此问题的另一种方法是继续使用 DefaultAzureCredential,但要提示 Visual Studio 使用哪个租户。
    首先左键单击您的项目并检查属性,然后:

    1. 左键单击“调试”
    2. 左键单击“添加”按钮添加环境变量
    3. 名称使用“AZURE_TENANT_ID”,价值使用您的租户 ID。是的,那是图片中的虚假租户 ID :-)

    参考

    【讨论】:

      【解决方案3】:

      通过将以下键添加到 local.settings.json 来指定准确的租户 ID。

      "AZURE_TENANT_ID": "your tenant id"
      

      我尝试创建一个 azure 函数,该函数使用托管标识触发器从服务总线队列接收消息,它对我有用。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-04-23
        • 2020-10-16
        • 2014-11-06
        • 2020-05-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多