2010-07-05 78 views
1

我想收到關於如何構建一個使用另一個asp.net中託管的WCF服務的asp.net Web應用程序的評論應用。這兩個應用程序將位於同一臺計算機上,但具有WCF服務的應用程序將無法從外部訪問。將有兩臺Web服務器共享負載平衡器後的負載。需要ASP.NET + WCF +安全性的建議和幫助

這兩個應用程序的應用程序池將使用相同的本地用戶帳戶(網絡服務器不是域的一部分),所以我想使用Windows安全WsHttpBinding用於客戶端和內部wcf服務之間的通信。

前端asp.net應用程序通過自定義成員資格/角色提供程序使用表單身份驗證來驗證和授權用戶。用戶數據庫位於sql服務器數據庫中。

我需要以某種方式將用戶詳細信息(用戶名+角色)傳遞給wcf服務,以便在wcf中可以根據誰在前端登錄的角色進行驗證和授權。我讀了我需要使用「支持令牌」,但我還沒有想出如何使用這個。

我還讀了一些有關索賠和WIF,這似乎很有趣,但不知道我可以如何使用這些在我的情況。

有沒有人可以給我關於該架構的建議,也許還告訴我如何將用戶名傳遞給wcf服務,並告訴我如果可能使用基於聲明的授權?

回答

1

首先,如果兩臺服務器位於企業局域網的企業防火牆之後,我強烈建議使用netTcpBinding而不是任何基於http的綁定。由於以二進制格式對消息進行編碼,NetTcpBinding速度更快。

至於用戶名/密碼:您的ASP.NET前端服務器可以爲調用WCF服務的用戶設置客戶端憑據 - 畢竟,ASP.NET服務器確實可以訪問ASP.NET成員數據庫,不是嗎?

或者如果你不能傳遞用戶的憑證,你可以傳遞一些頭文件到你的WCF服務中去描述用戶 - 實際上,你可能只需要用戶的唯一ID--因爲WCF服務可以把如果真的需要的話,再次從ASP.NET用戶數據庫獲取其他信息。

至於索賠 - 我不認爲他們在這裏會是個好主意 - 你並不需要處理大量不同的授權方案,而且你也沒有使用任何聯邦(例如允許用戶從不同的公司或域名使用你的服務) - 所以這些顯而易見的好處可能不會真正適用於你的情況。

+0

感謝您的回覆。我不認爲netTcpBinding是一個選項,導致Web服務器不幸運行IIS6。 傳遞支持令牌似乎是我需要做的將用戶登錄到前端Web應用程序的用戶名傳遞給wcf服務。但不幸的是,我無法設置它,它必須是證書的問題......我在這種情況下是否需要它們,因爲消息永遠不會離開服務器機器? – skyplusplus 2010-07-06 01:30:43

+0

@skyplusplus:Web服務器只作爲WCF客戶端,正確地調用WCF服務。在這種情況下使用netTcpBinding沒有問題/問題!唯一的一點是WCF服務需要在另一端自行託管,而不是在IIS6中託管。爲了能夠使用netTcpBindign,這一點額外的努力將非常值得! – 2010-07-06 05:34:17

+0

是的,我認爲我要這樣做,即在Windows服務中託管wcf服務並使用netTcpBinding公開它。你是對的,只需要將用戶標識添加到標題中就可以了,因爲wcf服務只能在本地訪問,因此調用者是可信的。 歡呼 – skyplusplus 2010-07-06 09:16:15