【问题标题】:Service Bus for Windows Server - Security/Permissions适用于 Windows Server 的服务总线 - 安全性/权限
【发布时间】:2013-01-04 17:58:20
【问题描述】:

我一直在试验用于 Windows Server 的服务总线。

首先是关于我的环境的一些信息。

我有两个 Windows 7 机器(我们称它们为主机和客户端)。他们都属于一个工作组(没有域)。每台机器都有两个用户帐户(我们称它们为 Admin 和 User)并且密码匹配。在主机上,管理员帐户被禁用,用户是管理员组的成员。用于 Windows Server 的服务总线安装在主机上。它是由用户帐户安装的。该服务在用户帐户凭据下运行,并且用户被列为 ServiceBusDefaultNamespace 的 ManageUser。

当我在安装 Service Bus 的同一帐户下的同一台机器上运行它们时,我设法让一个简单的 Sender 和 Receiver 正常工作(从 Azure Service Bus 示例中破解)。

然后我尝试将 Sender 复制到 Client 并运行它。我在证书方面遇到了一些问题,但我已经解决了这些问题。如果我以用户身份登录客户端,则发件人可以工作。如果我以管理员身份登录客户端,发件人会给我一个 (401) Unauthorized。如果我在 Host 上启用 Admin 帐户,那么 Sender 就可以工作。

以上所有内容都有一定的意义。主机正在尝试对请求进行身份验证,当它发现相应的管理员帐户被禁用时,它会拒绝该请求,但这似乎造成了一些不便,因为它要求我在所有计算机上都拥有活动帐户。

经过一番挖掘,似乎我应该能够指定帐户。在创建 MessagingFactory 时,我正在创建一个 TokenProvider,而 TokenProvider 允许我指定一组不同的凭据。

MessagingFactorySettings mfSettings = new MessagingFactorySettings()
{
    TokenProvider = TokenProvider.CreateWindowsTokenProvider( 
        new List<Uri>() { rootAddressManagement }, 
        new NetworkCredential( "Host\\User", "<User's Password>" ) )
};

但我仍然得到 401。

我想我想弄清楚如何在不同的机器上运行(可能)多个发件人,而不要求发件人可能在主机上运行的每个帐户都具有活动帐户。即使在基于域的环境中,如果运行发件人的域帐户没有访问主机的权限,我似乎也会遇到这个问题。

【问题讨论】:

    标签: servicebus


    【解决方案1】:

    对于工作组机器,在指定网络凭据时,不要添加主机名,只添加用户。那应该可以正确验证您的请求:

    MessagingFactorySettings mfSettings = new MessagingFactorySettings()
    {
        TokenProvider = TokenProvider.CreateWindowsTokenProvider( 
            new List<Uri>() { rootAddressManagement }, 
            new NetworkCredential( "User", "<User's Password>" ) )
    };
    

    如果您仍然遇到问题,此other thread 会提供有关设置的更多信息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-29
      • 2013-06-30
      • 1970-01-01
      • 2022-10-21
      • 1970-01-01
      相关资源
      最近更新 更多