簡體   English   中英

ASP.NET MVC 3自定義身份驗證/授權

[英]ASP.NET MVC 3 Custom Authentication/Authorization

我在互聯網上搜索過,所以我在這個主題上找到了一些好東西,但是我還有一些問題,我仍然不確定:

1)我正在使用自定義身份驗證提供程序的表單身份驗證。 所以我仍然使用Authorize屬性和web.config中的部分,但基本上當FormsAuthenticationTicket不存在時,我重定向到登錄頁面(在web.config中指定),然后利用自定義身份驗證提供程序來授權用戶對數據庫然后發出FormsAuthenticationTicket 這個對嗎?

2)我應該使用自定義Authorize屬性還是應該從Global.asax頁面中的Application_AuthenticateRequest事件處理程序中將GenericPrincipal注入HttpContext 或者我應該使用控制器操作的User.IsInRole insode?

我只需要基於角色的授權,我認為我的身份驗證方案非常好。

任何指針/建議?

謝謝,山姆

編輯

因此,根據我的閱讀,最好的選擇是創建自定義AuthorizeAttribute並覆蓋AuthorizeCore

所以我做的是這樣的:

public class CustomAuthorize : System.Web.Mvc.AuthorizeAttribute
    {
        protected override bool AuthorizeCore(HttpContextBase httpContext)
        {
            if (httpContext.User.Identity.IsAuthenticated)
            {
                var model = AdminUserViewModel.FromJsonString(((FormsIdentity)httpContext.User.Identity).Ticket.UserData);
                httpContext.User = new GenericPrincipal(HttpContext.Current.User.Identity, model.SecurityGroups.Select(x => x.Name).ToArray());
            }
            return base.AuthorizeCore(httpContext);
        }

        protected override void HandleUnauthorizedRequest(System.Web.Mvc.AuthorizationContext filterContext)
        {
            //base.HandleUnauthorizedRequest(filterContext);
            filterContext.Result = new System.Web.Mvc.RedirectResult("/Authentication/NotAuthorized", false);
        }
    }

只需使用存儲在FormsAuthenticationTicket UserData屬性中的角色注入新的主體/標識。 然后讓基地完成剩下的工作。

這看起來好嗎?

編輯#2

我對使用IIS7的global.asax中的Application_AuthenticateRequest感到有點厭倦,因為集成管道,每個請求都會觸發該事件,圖像,css,js ......

這個對嗎?

1)我做同樣的事情。

2)我使用Authorize屬性和Application_AuthenticateRequest事件處理程序。

在Application_AuthenticateRequest事件處理程序中,我執行以下操作:

    string[] roles = authenticationTicket.UserData.Split(',');

    if (Context.User != null)
        Context.User = new GenericPrincipal(Context.User.Identity, roles);

在控制器或動作級別,我做這樣的事情:

    [Authorize(Roles = "Admin, SuperAdmin")]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM