2011-05-19 43 views
0

我想知道如何限制某些未授權用戶訪問的方法。假設我有以下合同的WCF服務:限制未經授權(不需要)用戶訪問的WCF服務的方法

int Login(string username, string password); 
Invoice[] GetCustomersInvoices(int customerId); 

用戶應該通過以下方式行事:

  1. 登錄驗證對服務,並得到他的custumerId
  2. 他拿發票通過調用相應的方法與他的客戶Id

那麼,這可能是一個愚蠢的問題,但如果customerA的ID是23,但不知何故customerA k現在customerA可以讀取customerB的祕密發票數據... 我最好做什麼來避免這種情況?

回答

1

您不應該使用一個ID來識別某人。在WCF中啓用authn/authz有很多種方法,我喜歡http://msdn.microsoft.com/en-us/magazine/cc948343.aspx的文章,以便很好地介紹如何使用它。

+0

我知道這篇文章,但我不能得出一個結論,我。讓有1000個客戶訪問該服務。我該怎麼辦?也許我不夠聰明,無法從文章中得到這個結果;)我可以想象的唯一方法是將每個請求的用戶名和密碼發送出去,但這是每個方法的參數。但我認爲必須有更好的方法...... – NTT 2011-05-19 18:59:25

1

您當前的方法調用的方法,如果你能使用SSL或任何其他此類模式(典型情況是烘焙付款自助遊)

來實現客戶端和服務器之間的安全(永久)通道,IMO只會工作你需要在方法內部實現你的用戶認證(沒有單獨的調用)。即您必須將userid和password與invoiceid一起傳遞給GetCustomersInvoices()方法,並且在它內部您需要驗證用戶並檢索數據。

以下將是這種情況的解決方案,

  1. 實現自己的用戶名密碼驗證(custom usernameathentication),這將首先驗證用戶和比它會調用給出的方法。由於這將發生在一個請求,所以它會解決你的問題。 典型的服務方法調用會是什麼樣子,

    Service.UserName = "abc" 
    Service.Password = "***" 
    Service.GetInvoiceDetails(1233) 
    
  2. 你可以使用郵件Headers和機構通過您的自定義值,Web服務支持,這樣的場景,您可以在SOAP頭傳遞加密的數據。

  3. 或者,您也可以使用證書,但這些不是免費的。

一般來說你可以通過以下鏈接獲得各類安全WCF支持的更多信息,

http://msdn.microsoft.com/en-us/library/ms731925.aspx

相關問題