【问题标题】:Minimum Permissions for Creating and Deleting Subscriptions to an Azure Service Bus Topic?创建和删除 Azure 服务总线主题订阅的最低权限?
【发布时间】:2017-05-10 17:49:42
【问题描述】:

我正在创建一个应用,它需要创建和删除对 Azure 服务总线中已创建主题的订阅。

我的共享访问令牌是否需要管理该主题的权限才能创建和删除订阅?我做了一些初步的谷歌搜索,我找不到的文章都没有显示三个角色(管理、发送、监听)与订阅实体的相关性。

谢谢!

更新 我已经直接在主题上创建了共享访问策略,然后我编写了以下代码来访问主题,创建订阅,然后通过 IDisposable 接口取消/处理它们:

public class SubscriptionHandler : IDisposable
{
    protected NamespaceManager SubManager { get; set; }
    protected SubscriptionDescription SubDetails { get; set; }
    public SubscriptionClient Client { get; }

    public SubscriptionHandler(AuthDetails details)
    {
        try
        {
            var connectionString = ConfigurationManager.AppSettings["Microsoft.ServiceBus.ConnectionString"];
            SubManager = NamespaceManager.CreateFromConnectionString(connectionString);
            SubDetails = new SubscriptionDescription("topic", $"record{details.ID}.Other{details.OtherID}");
            if (!SubManager.SubscriptionExists(SubDetails.TopicPath, SubDetails.Name))
            {   //setting subscription to receive all bookings that are for the given businessID
                SubManager.CreateSubscription(SubDetails, new SqlFilter($"ID = {details.ID}"));
            }

            Client = SubscriptionClient.CreateFromConnectionString(connectionString, SubDetails.TopicPath, SubDetails.Name);
        }catch (Exception ex)
        {
            throw;
        }
    }

    public void Dispose()
    {
        if(Client != null)
        {
            Client.Close(); // telling subscription we are no longer going to recieve messages
        }

        if (SubManager != null && SubManager.SubscriptionExists(SubDetails.TopicPath, SubDetails.Name))
        {
            SubManager.DeleteSubscription(SubDetails.TopicPath, SubDetails.Name);
        }
    }

但是,我仍然在

上抛出未经授权的异常

SubManager.CreateSubscription(SubDetails, new SqlFilter($"ID = {details.ID}")); 称呼。我从 SharedAccessPolicy 连接字符串中复制了连接字符串,然后删除了 EntityPath 名称值对……我做错了什么?

【问题讨论】:

    标签: .net azure permissions azure-servicebus-topics


    【解决方案1】:

    我的共享访问令牌是否需要管理该主题的权限才能创建和删除订阅?

    正如官方文档中提到的Rights required for Service Bus operationsCreate a subscriptionDelete subscription 操作需要对该主题的管理权限。

    如果没有管理权限,在处理创建/删除订阅操作时会得到如下401响应:

    【讨论】:

    • 谢谢布鲁斯!你是我所有天蓝色问题的首选人!
    • 嘿布鲁斯,我直接在我使用管理、发送和侦听声明创建的主题上创建了一个共享访问密钥。但是,当我到达创建订阅的代码时,我仍然看到引发了未经授权的异常。我正在使用我用来创建和处置订阅的代码的 sn-p 更新我的问题
    • 我调整为使用共享访问令牌和整个服务总线上的所有声明(我有许多其他队列等)并且它可以工作,但我想将此连接字符串限制为我创建的主题。这可能吗?
    • 我想当您从连接字符串中删除 EntityPath 时,您可以尝试检查是否在连接字符串的末尾留下了分号 (;)。
    • 我确实留下了分号......这会影响连接吗?
    猜你喜欢
    • 2016-02-10
    • 1970-01-01
    • 2016-12-29
    • 1970-01-01
    • 2018-08-27
    • 1970-01-01
    • 1970-01-01
    • 2017-10-23
    • 2018-07-18
    相关资源
    最近更新 更多