我正在學習和設計一個WCF服務。我選擇使用Windows憑據作爲身份驗證方法,並且我已經正確配置了它,希望能夠這樣做,因爲當我測試託管在本地計算機上的服務時,可以從事件日誌查看器中查看身份驗證審覈日誌。如何控制WCF身份驗證會拒絕哪些內容?
但是現在我想出了這個奇怪的問題:在這種配置下哪些用戶不會被認證?我的服務是否對同一個Windows域中的所有Windows用戶進行身份驗證,或者我可以指定域中的哪些特定用戶將不會得到身份驗證?
或者,這是否意味着我只能控制哪些用戶(在我的域中)可以執行我的服務通過授權(我知道該怎麼做)提供的操作?
聽起來很簡單,但我發現的所有材料只告訴你如何執行身份驗證,並沒有說如何拒絕身份驗證請求。
更新: 閱讀@syneptody的答案後,我仍然有兩個問題:
- 我必須說我的身份驗證和授權之間的混亂仍然存在。認證手段識別用戶。但是,如果我想告訴屬於與服務主機相同的域的用戶(順便說一句,它是IIS),誰只是向我的服務發出請求,「您沒有通過身份驗證」,我應該說的是「我做你的身份驗證,但你沒有授權(執行你的請求)「,是嗎?對於我的域中的用戶沒有「未經身份驗證」狀態?如果不屬於我的域的用戶提出請求會怎麼樣?我的服務會告訴他「你沒有被認證」或「你沒有被授權」?只要此用戶具有身份,該服務就會對其進行身份驗證,並繼續調查是否應該授權該服務。
- @syneptody提到這個「授權」元素。它屬於ASP.NET,它指定哪些角色可以/不能訪問資源(無論是網站還是託管在網站中的應用程序,具體取決於它所在的Web.config文件)。這樣對嗎?但是如果我不使用ASP.NET或不以ASP.NET兼容模式託管WCF,它仍然可以像那樣工作嗎?其實我們的要求是隻提供服務,所以我沒有想到使用ASP.NET,因爲在我看來,它更像是一個消費我的服務的Web客戶端。 順便說一句,我的使用場景是這個服務將在Intranet內託管和使用。所以我選擇Windows憑據進行身份驗證,選擇Windows組進行基於角色的授權,因爲在我看來,這需要最少的工作。
爲了解決問題1,請記住AD認證用戶和IIS的授權請求。在Windows域中,世界認證總是由域控制器完成。所以401會像你沒有被認證,例如匿名,並且此資源需要經過身份驗證的用戶。 403將是你的身份驗證,但未經授權。 – syneptody 2011-12-14 13:14:41
要解決問題2,建議的解決方案確實需要ASP.NET兼容模式。我不以這種或那種方式寬容......我只是將它作爲一種方法提供,因爲它是迄今爲止最容易實施的方法。 WCF中的安全性是一個非常龐大而複雜的主題,有幾種方法可以做到。如果您的解決方案可以採用兼容模式(並且我的經驗是大多數企業服務可以),那麼這種方法可能適用於您。 – syneptody 2011-12-14 13:16:51