Asp.net

具有自定義角色的 ASP.NET MVC 和 Windows 身份驗證

  • March 3, 2016

我正在嘗試在我的 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>

引用自:https://stackoverflow.com/questions/6043100