簡體   English   中英

如何實現簡單的WCF安全

[英]How to implement simple WCF security

我們有一個C#客戶端應用程序,可通過WCF與我們的C#后端服務進行通信。 我們要確保對我們服務的每次W​​CF調用均來自已登錄客戶端的用戶,而不是通過某些黑客弄清楚了如何調用WCF服務。

我想有幾種方法可以確保這一點。 其中之一是讓我們的后端Login方法返回某種令牌,每個客戶端WCF調用都必須將該令牌傳遞為WCF調用的一部分。 為了獲得這樣的令牌,調用者將必須提供有效的登錄憑證。 對於每個WCF調用,令牌將在背面得到驗證。 如果無法驗證令牌,則WCF調用將失敗。

我想要一種簡單直接的方法。 我們不需要任何超級復雜和安全的東西。 有人對完成此操作的標准方式有任何了解嗎? 我們正在使用.NET4。我應該補充一點,就是我對WCF沒有太多的經驗。

更多信息。 我們有兩個不同的客戶端應用程序調用我們的WCF服務。 一個是基於WPF的客戶端,另一個是基於瀏覽器的應用程序(ASP.NET)。 兩者都是互聯網范圍的應用程序。 我們的客戶可以在世界任何地方。

實現此目的的最簡單方法是將wsHttpBinding與以下配置一起使用:

<bindings>
  <wsHtttpBinding>
    <binding name="securitySession">
      <security mode="Message">
        <message clientCredentialType="UserName" 
                 establishSecurityContext="true"
                 negotiateServiceCredentials="false" />
      </security>
    </binding>
  </wsHttpBinding>
</binding>

此綁定使用安全會話配置狀態完整服務。 如果您的客戶端為服務創建代理,則它必須在內部執行的初始安全握手中傳遞用戶名和密碼。 在此握手期間,WCF創建與安全令牌關聯的服務實例。 安全令牌被傳遞回客戶端代理,並且代理將其內部存儲。 來自同一代理實例的任何后續調用都包含此令牌,該令牌對其進行身份驗證並將它們與正確的服務實例配對。

為了使此配置在自定義環境中起作用,您必須將服務配置為使用將保護通信安全的證書(否則任何人都可以截獲通信以及鋼制用戶名,密碼或令牌)。 您還必須在服務端使用自定義用戶名和密碼驗證器(或ASP.NET成員身份)。

它如何適合您的解決方案?

您的ASP.NET應用程序可以使用該服務使用自定義表單身份驗證來啟動安全會話。 在ASP.NET端,您需要將代理保留在ASP.NET會話中,並且必須正確配置安全性和ASP.NET會話的超時,以便ASP.NET會話在WCF安全會話之前失效。 您將使用cookie來為后續的客戶端調用接收正確的ASP.NET會話。

在WPF應用程序中,您可以使用相同的方法,並在每次應用程序運行時存儲代理。 您只需要確保代理不會超時或處理超時並再次登錄用戶即可。 客戶端計算機還必須信任您的服務使用的證書。

在WPF的情況下,你也可避免安全會議,並與你的服務暴露第二端點establishSecurityContext="false" 在這種情況下,用戶名和密碼將包含在WPF應用程序的每個調用中,您將不必使用狀態完全服務解決與長期代理相關的許多問題。 如果沒有安全上下文,則WPF應用程序的狀態將更少。 您不想在ASP.NET中使用此功能的原因是,您將不得不在會話中存儲用戶名和密碼。

此解決方案有哪些缺點?

這是沉重的解決方案。 安全上下文無需任何編碼就可以提供您正在尋找的功能,但是它要自己付費。 您將不得不在ASP.NET應用程序中使用會話來維護WCF代理,您將擁有狀態全服務,通常應該避免這種情況,並且如果您期望應用程序中的負載很大,則必須做很多性能和內存調整。 您將必須控制會話是否正確釋放,所有WCF代理正確關閉和處置,以便服務實例也被釋放。 您將不得不在WCF中進行節流,以支持足夠的並發運行的服務實例。

4年前,我在負載繁重的面向Internet的Web應用程序中成功使用了類似的方法,但是花了一些時間才能發現所有問題並正確配置所有超時並正確處理所有對象的釋放。

作為替代方案,您可以尋找某種聯合方案,在該方案中,您將有一個附加的服務處理身份驗證並提供安全令牌,這些令牌將用於對ASP.NET應用程序和WCF服務進行身份驗證。 我認為OAuth也應該處理這種情況。

我建議您將wsHttpBinding與基於證書的消息安全性一起使用。 看看這里的演練: http : //www.codeproject.com/Articles/28248/Securing-WCF-Services-with-Certificates (適用於Windows Server 2003,但此過程在較新的服務器上沒有太大不同)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM