本地.NET Core控制台应用Azure AD认证Azure Service Bus的权限配置疑问
改用Azure AD认证Azure Service Bus的配置步骤
一、为Azure AD应用注册添加Service Bus API权限
- 登录Azure门户,找到你已注册的AD应用,进入API权限页面。
- 点击「添加权限」,切换到「我的组织使用的API」标签,搜索并选中
Microsoft.ServiceBus(部分场景下显示为「Azure Service Bus」)。 - 选择应用权限(控制台应用属于服务端身份,无需用户交互,因此使用应用权限而非委派权限),根据业务需求勾选对应权限:
Azure Service Bus Data Sender:仅发送消息权限Azure Service Bus Data Receiver:仅接收消息权限Azure Service Bus Data Owner:完全管理权限
- 点击「添加权限」后,需由拥有全局管理员或特权角色的账号点击「授予管理员同意」,确保权限生效。
二、为AD应用分配Service Bus RBAC角色
- 进入你的Azure Service Bus命名空间页面,打开**访问控制(IAM)**选项卡。
- 点击「添加」→「添加角色分配」。
- 在角色列表中选择对应的Service Bus数据角色(与第一步选的权限对应即可),比如「Azure Service Bus Data Sender」。
- 在「分配访问权限至」中选择「Azure AD用户、组或服务主体」,搜索并选中你注册的AD应用名称。
- 点击「保存」,等待5-10分钟让权限同步生效。
三、.NET Core控制台应用代码修改示例
使用新SDK Azure.Messaging.ServiceBus(推荐)
using Azure.Identity; using Azure.Messaging.ServiceBus; // 替换为你的实际配置 var tenantId = "你的Azure AD租户ID"; var clientId = "你的AD应用客户端ID"; var clientSecret = "你的AD应用客户端密钥"; var serviceBusNamespace = "你的Service Bus命名空间.servicebus.windows.net"; // 使用ClientSecretCredential获取AD令牌 var credential = new ClientSecretCredential(tenantId, clientId, clientSecret); var serviceBusClient = new ServiceBusClient(serviceBusNamespace, credential); // 后续发送/接收消息逻辑与SAS方式一致,示例: var sender = serviceBusClient.CreateSender("你的队列名"); await sender.SendMessageAsync(new ServiceBusMessage("测试消息"));
使用旧SDK Microsoft.Azure.ServiceBus
using Microsoft.Azure.ServiceBus; using Microsoft.IdentityModel.Clients.ActiveDirectory; using System.Threading.Tasks; var namespaceName = "你的Service Bus命名空间"; var clientId = "你的AD应用客户端ID"; var clientSecret = "你的AD应用客户端密钥"; var tenantId = "你的Azure AD租户ID"; // 自定义令牌提供器 var tokenProvider = new AzureServiceBusTokenProvider(async (audience, authority, state) => { var authContext = new AuthenticationContext($"https://login.microsoftonline.com/{tenantId}/"); var clientCredential = new ClientCredential(clientId, clientSecret); var authResult = await authContext.AcquireTokenAsync(audience, clientCredential); return authResult.AccessToken; }, "https://servicebus.azure.net/", $"https://login.microsoftonline.com/{tenantId}/"); // 创建队列客户端 var queueClient = new QueueClient($"sb://{namespaceName}.servicebus.windows.net/你的队列名", tokenProvider);
内容的提问来源于stack exchange,提问作者OpenStack
相关产品推荐
相关产品推荐

