2013-01-04 80 views
0

我一直在试验Windows服务器的服务总线。Windows服务器的服务总线 - 安全/权限

首先介绍一下我的环境。

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

当我在安装Service Bus的同一帐户下的同一台计算机上运行它们时,我设法让一个简单的发送方和接收方工作(从Azure服务总线示例中入侵)。

然后我试着将发件人复制到客户端并运行它。我在证书上遇到了一些问题,但我已经过去了。如果我以用户身份登录到客户端,则发件人工作。如果我以管理员身份登录到客户端,发件人会给我一个(401)未经授权的通知。如果我在主机上启用管理员帐户,则发件人工作。

以上所有内容都具有一定的含义。主机正在尝试验证请求,并且当它发现相应的管理员帐户被禁用时,它会拒绝该请求,但它似乎造成了一些轻微的不便,因为它要求我在所有机器上都有活动帐户。

经过多一点挖掘,似乎我应该能够指定帐户。在创建MessagingFactory时,我创建了一个TokenProvider,并且TokenProvider允许我指定一组不同的凭证。

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

但是我还是有一个下401

我想我试图找出如何运行(潜在的)在不同的机器上的多个发送者不需要在每个帐户发件人可能运行主机上的活动帐户。即使在基于域的环境中,如果运行发件人的域帐户没有访问主机的权限,似乎也会遇到此问题。

回答

0

对于工作组机器,在指定网络凭证时,请勿添加主机名,只能添加用户。这应该让你的要求正确进行身份验证:

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

other thread对设置的详细信息,如果您还遇到问题。