2010-08-20 84 views
0

這裏的基本問題(我認爲),我希望有人能指出我朝着正確的方向。我不太瞭解WCF,但我想創建一個Web服務,以便從ASP.Net MVC應用程序調用。目標是確保只有經過授權的ASP.Net用戶(我們使用表單身份驗證)才能調用Web服務,而不僅僅是任何人。那裏有教程,我可以看看如何解決這個問題?非常感謝。從ASP.Net MVC驗證對WCF/Web服務的調用MVC

+0

你的問題描述了兩種不同的情況。從ASP.NET MVC調用的Web服務意味着您的服務器端代碼調用Web服務。在這種情況下,您可以控制對調用代碼的訪問只有授權的ASP.NET用戶調用Web服務意味着瀏覽器調用該服務(AJAX)。你需要哪種情況? – 2010-08-20 21:30:48

+0

我們仍然在感受我們通過可能性的方式,所以任何一種情景都是開放的(或者兩者兼而有之!)對不起,我不能更具體,我基本上是想知道什麼是可能的。 – larryq 2010-08-23 18:11:32

回答

1

我從這個問題假設你不在乎什麼結束(MVC)用戶ID是擊中WCF服務(換句話說,你不需要一個特定的認證用戶擊中WCF所以你可以得到這個特定用戶的ID(即你知道joeBobUser命中WCF))。你只是想確保用戶通過身份驗證和授權使用該網站。你不需要你的MVC應用程序的每個潛在用戶都被認證/授權。

只要是真的,那麼我的方法是如下:

  • 運行你的MVC應用程序作爲一個特定的已知用戶賬號(即建立在應用程序池IIS來運行域用戶,例如yourdomain \ youMvcAccount)而不是默認的asp帳戶。如果您尚未以域用戶的身份運行您的mvc應用程序,有很多網站會提供有關如何實現此目的的說明。
  • 設置你的WCF服務端點配置WsHttp結合。再次,許多網站描述如何做到這一點。這裏的one,它通過GUI(我更喜歡手動編輯配置,但不管)。所以,現在你的WCF服務將只接受安全認證請求
  • 建立在MVC應用程序的WCF客戶端代理。這樣做最簡單的方法(可能不是最好的:關注的分離,但只是開始)只是添加新的Web服務,並以這種方式發現你的WCF端點。再一次,如果你不知道如何做到這一點,那麼基本的東西很容易被人看到。現在
  • 你的MVC應用程序將作出調用驗證的WCF服務。但是,此時,在您的域中通過身份驗證的任何客戶端都可以調用該服務。您現在只接受已認證但已獲得授權的用戶。從你的MVC應用程序命中WCF發出的呼叫將被從身份YOURDOMAIN \ yourMvcApp
  • 限制授權,在#1限制(授權)設置身份驗證的用戶可以做多種方式。 get'r'done快速方式(但不是很靈活,因爲任何更改都需要重新編譯)只是檢查請求的身份與您的服務調用中直接使用的WCF服務的身份相同。或者,您可以設置更強大的(同時具有更多傀儡)選項,如AzMan或其他WCF驗證規則集。同樣,許多網站都有指示,在您擁有經過身份驗證的用戶後設置這類事情。這裏是一個SO question that limits authorization to a windows group的文章(我會這樣做 - 更靈活,但你需要將該用戶添加到你的域中的一個組),另一篇文章更詳細地介紹了WCF安全性和allowing only a specific user訪問服務。
  • +0

    我同意除了WsHttpBinding。你爲什麼選擇那個? – 2010-08-20 22:01:04

    +0

    你知道,現在你提到它了,我想它並不重要,只是它是最常見的安全綁定,因此很容易在Web上找到示例/幫助。在我的店裏,我們需要kerberos,因爲我們負載均衡,但這是一種我不想試圖說明如何實現這一點的痛苦。 – 2010-08-20 22:04:49

    +0

    如果您希望服務將通過Internet調用,而不是WSHttpBinding是不錯的選擇,但是在Intranet中調用服務的情況下,我會選擇其他服務。但是這個問題沒有指定如何調用服務,所以WSHttpBinding可能是不錯的選擇。 – 2010-08-22 20:35:39