尝试将托管标识与Azure Service Bus一起使用 [英] Trying to use Managed Identity with Azure Service Bus

查看:68
本文介绍了尝试将托管标识与Azure Service Bus一起使用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已尝试遵循this教程,以便根据DefaultAzureCredentials对我的服务总线进行身份验证,但是,我得到了401。

我在设置中使用了以下代码:

services.AddAzureClients(x =>
{
    x.AddServiceBusClientWithNamespace("myns.servicebus.windows.net")
        .WithCredential(new Azure.Identity.DefaultAzureCredential());
});

然后我这样调用SB客户端:

var sender = client.CreateSender("myqueue");
var message = new ServiceBusMessage(Encoding.UTF8.GetBytes("test"));

await sender.SendMessageAsync(message);

当我调用SendMessageAsync时,收到401错误:

失败:Azure-Messaging-ServiceBus[82] 为以下标识符创建发送链接时出现异常:myQueue-578624f3-f732-4a9b-2ab0-9adc01949a5a。错误消息: ‘System.UnAuthizedAccessException:放置令牌失败。状态代码: 401,状态描述:InvalidIssuer:令牌颁发者无效。 TrackingId:cde3a89c-8108-48d1-8b8f-dacde18e176f, 系统跟踪器:无系统跟踪器,时间戳:2021-05-19T07:18:44。

在运行此程序之前,我调用az login。我可以访问要发送和接收的命名空间。我的猜测是,我需要在服务巴士和...之间分配某种权限。有些事情--但由于我是作为一个控制台应用程序运行这个应用程序的,所以我是用我自己的凭据运行的。显然,托管身份有一些我不理解的地方。

编辑:

按照@juunas的建议,我尝试了以下操作:

services.AddHostedService<ConsoleHostedService>();
services.AddAzureClients(x =>
{
    //var creds = new Azure.Identity.EnvironmentCredential(); // 1st - EnvironmentCredential authentication unavailable. Environment variables are not fully configured.'
    //var creds = new Azure.Identity.ManagedIdentityCredential(); // 2nd - No Managed Identity endpoint found
    //var creds = new Azure.Identity.SharedTokenCacheCredential(); // 3rd - 'SharedTokenCacheCredential authentication unavailable. No accounts were found in the cache.'
    //var creds = new Azure.Identity.VisualStudioCodeCredential(); // 4th - 'Stored credentials not found. Need to authenticate user in VSCode Azure Account.'
    //var creds = new Azure.Identity.AzureCliCredential(); // 5th
    var creds = new Azure.Identity.DefaultAzureCredential();
    
    x.AddServiceBusClientWithNamespace("myns.servicebus.windows.net")
        .WithCredential(creds);

推荐答案

它表明";令牌颁发者无效";。 这意味着它获得了访问令牌,但它是由错误的Azure AD租户颁发的。 Az CLI允许您在az login上使用-t tenant-id-here参数指定Azure AD租户ID。

DefaultAzureCredential也可能正在使用其他凭据(它在使用AzureCliCredential之前尝试多个凭据,如VisualStudioCredential)。 相反,您可以尝试直接使用AzureCliCredential,看看它是否有效。 这当然不会使用托管身份,因此您需要将ChainedTokenCredential与AZ CLI凭据+托管身份凭据一起使用才能同时支持两者。

这篇关于尝试将托管标识与Azure Service Bus一起使用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆