2013-01-04 113 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對設置的詳細信息,如果您還遇到問題。