2

我覺得我可能會在這裏錯誤的路線,並希望有人能夠糾正一個小課程!混淆Windows身份驗證與索賠

我正在創建一個使用Windows身份驗證的Web應用程序。但是,我希望將自定義聲明/角色分配給特定的Windows用戶,我打算將其存儲在SQL數據庫中。

我認爲做到這一點的方法是在我的應用程序的web.config中啓用Windows身份驗證,但從WIF添加AuthenticationManager(可以將自定義聲明(它直接從數據庫中添加)添加到主體/身份。然後,授權管理器將處理對特定控制器操作的授權。

我現在遇到的問題是我的身份驗證和授權管理器沒有被調用。我不知道我錯過了什麼(他們在web.config中註冊),但我懷疑可能是因爲我正在使用Windows身份驗證...?另外,我的Authorize屬性沒有調用AuthorizationManager,可能是因爲我需要創建一個新的屬性。

這是一條可行的路線,或者我應該在創建一個自定義的RoleProvider?

回答

1

ClaimsAuthenticationManager不會自動調用 - FAM會調用它。

這樣說 - 你可以自己調用它,例如在Post_AuthenticateRequest中,然後使用SAM設置一個cookie。這完全可行。

+0

謝謝!我不完全確定這是如何工作的。我已經設法從Application_PostAuthenticateRequest方法調用我的ClaimsAuthenticationManager,並可以使用SAM寫入cookie。儘管SAM如何從cookie中爲每個後續請求加載聲明?這個Application_PostAuthenticateRequest是針對每個請求調用的 - 是否有任何方法來減少它對應用程序的影響?即使對圖像的請求,我的ClaimsAuthenticationManager也從數據庫中檢索角色!如果你有任何例子,那就是王牌! –

+0

我發現我認爲這是一個很好的解決方案:http://stackoverflow.com/questions/16904639/simple-claims-transformation-and-caching-w-windows-authentication –

+1

您需要編寫cookie幷包含SAM模塊來讀取它。在第一個請求中,您應該有一個WindowsPrincipal,在您編寫Cookie之後,您應該有一個簡單的ClaimsPrincipal。這就是你可以優化它的方法。 – leastprivilege