我目前正在使用服務總線作爲Windows Server隊列和主題處理客戶端與服務器之間的消息傳遞的項目。目前我正在研究如何處理客戶端的身份驗證,並相信我們需要使用SAS。與隊列通信的客戶端可以同時使用rest和.net api。我試圖找到有關如何處理令牌生成和分發的最佳實踐的資源。例如,我們應該爲此創建一個服務,以便呼叫客戶端可以連接到提供訪問密鑰,然後生成一個返回給客戶端的令牌。想法和建議將不勝感激。爲Windows服務器使用服務總線時的客戶端身份驗證
/感謝
我目前正在使用服務總線作爲Windows Server隊列和主題處理客戶端與服務器之間的消息傳遞的項目。目前我正在研究如何處理客戶端的身份驗證,並相信我們需要使用SAS。與隊列通信的客戶端可以同時使用rest和.net api。我試圖找到有關如何處理令牌生成和分發的最佳實踐的資源。例如,我們應該爲此創建一個服務,以便呼叫客戶端可以連接到提供訪問密鑰,然後生成一個返回給客戶端的令牌。想法和建議將不勝感激。爲Windows服務器使用服務總線時的客戶端身份驗證
/感謝
我會建議使用WindowsTokenProvider和Windows用戶帳戶。
首先將有效的Windows用戶添加到您的隊列/主題上的總線發送權限。爲REST API客戶端身份驗證通過HTTP(您可以在代碼中或通過服務總線探險做到這一點。)
那麼 - 你需要一個有效的用戶名/密碼後轉移到STS然後將得到的權杖加實際發佈到隊列的授權標頭。 You can see how to do this here...
爲.NET客戶端通過TCP - 運行客戶端一樣有效的Windows用戶,然後調用STS與使用TokenProvider.CreateWindowsTokenProvider這些隱含的憑據。
3.1如果您使用的是NetMessagingBinding爲您的客戶(WCF),然後進行以下操作:
var uri = new Uri(string.Format("https://{0}:9355/ServiceBusDefaultNamespace", serverName));
var uris = new List<Uri> {uri};
var securityBehavior = new TransportClientEndpointBehavior
{
TokenProvider = TokenProvider.CreateWindowsTokenProvider(uris)
};
var endpoint = new ServiceEndpoint(contract, new NetMessagingBinding(), new EndpointAddress(serviceBusEndpointAddress));
endpoint.Behaviors.Add(securityBehavior);
3.2 NB - 上面的代碼將當前主體的隱式證書,並通過他們跨越。但是,可以明確地傳遞憑據是這樣的:
var securityBehavior = new TransportClientEndpointBehavior
{
TokenProvider = TokenProvider.CreateWindowsTokenProvider(uris, new NetworkCredential("myUser", "myPassword"))
};
3.3或者如果你只是使用普通的.NetClient你可以做同樣的是這樣的:
var uri = new Uri(string.Format("https://{0}:9355/ServiceBusDefaultNamespace", serverName));
var uris = new List<Uri> {defaultUri};
var messagingFactorySettings = new MessagingFactorySettings();
messagingFactorySettings.TokenProvider =
TokenProvider.CreateWindowsTokenProvider(uris, new
NetworkCredential("myUser", "myPassword"));
.....
var factory = MessagingFactory.Create("endpoint", messagingFactorySettings);
對不起,我沒有說清楚在我最初的問題。我確實相信我們能夠爲某些客戶使用Windows集成安全性,併爲此感謝很多答案。但是,對於像我們無法使用Windows帳戶的第三方CRM系統一樣使用SAS的客戶,是否有任何最佳做法或建議? – mstrand
對不起,我以前沒用過sas。聽起來就像你在中途的一半!如果它有用的話,免費提供我的答案;-)。 – jonho