gpt4 book ai didi

azureservicebus - Azure 服务总线 - 未经授权的访问。执行此操作需要 'Send' 声明

转载 作者:行者123 更新时间:2023-12-05 05:03:19 29 4
gpt4 key购买 nike

我正在尝试从我的 Windows 服务 应用程序访问 Azure Service Bus Queue。我正在关注 this样本。

我想使用 Azure Service Principal 保护此 Azure Service Bus 下面是我已实现的步骤

  1. Azure Ad 中注册名为 pc-shutdown-producer 的应用程序代表我的 Windows 服务
  2. 我已经创建了名为 shutdowncomputer 的 Azure 服务总线命名空间
  3. Access control (IAM) 中,我添加了具有以下值的 Role Assignment
    • 角色 - Azure 服务总线数据所有者
    • 分配对 - pc-shutdown-producer 的访问权限

据我所知,以上配置将让 pc-shutdown-producer 应用程序管理 servicebus 命名空间中的所有资源。 4. 除此之外,我还提供了 pc-shutdown-producer 委托(delegate) API 权限来访问服务总线命名空间。

enter image description here

下面是我的 C# 代码。

        public async Task Init()
{
string authority = $"https://login.windows.net/{TenantId}";

ITokenProvider tokenProvider = TokenProvider.CreateAzureActiveDirectoryTokenProvider(AuthenticationCallback, authority);
var endpoint = new Uri($"sb://shutdowncomputer.servicebus.windows.net/");
var entityPath = "shutdownrequest";

var qc = new QueueClient(endpoint.ToString(), entityPath, tokenProvider);

Message m = new Message();
m.Body = Encoding.ASCII.GetBytes("{id: 1, name: 'hemant'}");
m.ContentType = "application/json";
try
{
await qc.SendAsync(m);
}
catch (Exception ex)
{
//I am getting exception here.
//Unauthorized access. 'Send' claim(s) are required to perform this operation.
throw ex;
}
}

private async Task<string> AuthenticationCallback(string audience, string authority, object state)
{
string accessToken = string.Empty;
IConfidentialClientApplication app = ConfidentialClientApplicationBuilder.Create(AppId)
.WithAuthority(authority)
.WithClientSecret(Password)
.Build();

var serviceBusAudience = new Uri("https://servicebus.azure.net");

List<string> claims = new List<string>();
claims.Add($"{serviceBusAudience}/.default");
try
{
var result = await app.AcquireTokenForClient(claims.ToArray()).ExecuteAsync();
accessToken = result.AccessToken;
}
catch (Exception ex)
{
//No issue here.
Console.WriteLine(ex.Message);
}
//Successfully able to retrieve a token.
return accessToken ;
}

在执行 Init() 时,我收到以下异常消息。

未经授权的访问。执行此操作需要“发送”声明。资源:'sb://shutdowncomputer.servicebus.windows.net/shutdownrequest'。 TrackingId:52c0eedcf19d4513a8ec105943859764_G12,SystemTracker:gateway7,时间戳:2020-05-11T06:59:01

更新 1

根据@Carl Zhao 的建议,我已经向 pc-shutdown-producer 提供了管理员许可,但仍然有同样的问题。

enter image description here

谢谢

最佳答案

权限不足,应添加管理员同意: enter image description here

关于azureservicebus - Azure 服务总线 - 未经授权的访问。执行此操作需要 'Send' 声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61724021/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com