Asp.net
具有自定義角色的 ASP.NET MVC 和 Windows 身份驗證
我正在嘗試在我的 ASP.NET MVC2 應用程序中實現 Windows 身份驗證。我已按照官方文件建議的所有步驟進行操作:
<authentication mode="Windows" /> <authorization> <deny users="?" /> </authorization>我已經指定了 NTLM 身份驗證。到目前為止,一切都很好。一切正常。我想根據我的數據庫檢查登錄的使用者。我想從我的表中獲取角色,然後使用自定義屬性管理授權。
我不想使用會員和角色提供者。 我已經有我的表使用者/角色,因為它們已用於 Internet 應用程序(這是 Intranet 應用程序)。
在我的 Internet 應用程序中,我有一個使用者輸入數據的表單。該表單被發佈到一個控制器,該控制器檢查所有內容並使用登錄使用者的使用者(和角色)創建一個 cookie。
在我的 global.asax 中,我擷取了 AuthenticateRequest 事件,在該事件中我讀取了 cookie 並創建了一個自定義主體,我在整個應用程序中使用它來檢查授權。
如何使用 Windows 身份驗證來實現這一點?
只需創建一個新主體並將其分配給 Global.asax 中的使用者和執行緒(或使用操作過濾器)。
protected void Application_AuthenticateRequest(object sender, EventArgs args) { if(HttpContext.Current != null) { String [] roles = GetRolesFromSomeDataTable(HttpContext.Current.User.Identity.Name); GenericPrincipal principal = new GenericPrincipal(HttpContext.Current.User.Identity, roles); Thread.CurrentPrincipal = HttpContext.Current.User = principal; } }如果使用者沒有任何匹配的角色,可以使用 web.config authoirzation 元素禁止他們使用應用程序:
<authorization> <allow roles="blah,whatever"/> <deny users="*"/> </authorization>