gpt4 book ai didi

ASP.NET MVC 3 自定义身份验证/授权

转载 作者:行者123 更新时间:2023-12-02 10:05:58 24 4
gpt4 key购买 nike

我在互联网上进行了搜索,并且找到了一些关于这个主题的好东西,但是我仍然不确定一些问题:

1) 我正在将表单例份验证与自定义身份验证提供程序一起使用。因此,我仍然使用 Authorize 属性和 web.config 中的部分,但基本上当 FormsAuthenticationTicket 不存在时,我会重定向到登录页面(在 web.config 中指定) .config),然后利用自定义身份验证提供程序根据数据库对用户进行身份验证,然后发出 FormsAuthenticationTicket。这是正确的吗?

2) 我应该使用自定义 Authorize 属性,还是应该将 GenericPrincipalApplication_AuthenticateRequest 注入(inject)到 HttpContext global.asax 页面中的事件处理程序?或者我应该在 Controller 操作中使用 User.IsInRole 吗?

我只需要基于角色的授权,我认为我的身份验证方案非常好。

有什么指示/建议吗?

谢谢,山姆

编辑

因此,根据我所读到的内容,最好的选择是创建自定义 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 属性中的角色注入(inject)新的主体/身份。然后让底座完成剩下的工作。

这看起来没问题吗?

编辑#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);

在 Controller 或操作级别我做了这样的事情:

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

关于ASP.NET MVC 3 自定义身份验证/授权,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7717954/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com