gpt4 book ai didi

asp.net-mvc - 扩展 AuthorizeAttribute 以检测登录的非用户(如何处理用户授权)

转载 作者:行者123 更新时间:2023-12-02 00:11:08 25 4
gpt4 key购买 nike

环境:ASP.NET MVC 4、Visual Studio 2012

[Authorize]属性验证用户是否具有有效的登录 cookie,但不验证用户是否实际存在。如果用户被删除而该用户的计算机仍保留持久的凭据 cookie,则会发生这种情况。在这种情况下,允许登录的非用户运行标有 [Authorize] 属性的 Controller 操作。

解决方案似乎很简单:扩展 AuthorizeAttribute并在 AuthorizeCore 例程中验证用户是否存在。

在我编写此代码供自己使用之前,我想知道是否有人知道 [Authorize] 中这个漏洞的现成解决方案。属性。

最佳答案

您需要一个特殊的身份验证全局操作过滤器。

您的问题的解决方案如下。您必须引入将在调用 Controller 操作之前执行的全局操作过滤器。此事件名为 OnActionExecuting。在这个全局操作过滤器中,您还可以处理用户拥有有效身份验证 cookie,但不再存在于持久性 (DB) 中(并且您必须删除其 cookie)的情况。

这里是获得一个想法的代码示例:

    public class LoadCustomPrincipalAttribute : ActionFilterAttribute 
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
CustomIdentity customIdentity;

if (HttpContext.Current.User.Identity.IsAuthenticated)
{
UserData userData = UserRepository.GetUserByName(HttpContext.Current.User.Identity.Name);

if (userData == null)
{
//TODO: Add here user missing logic,
//throw an exception, override with the custom identity with "false" -
//this boolean means that it have IsAuthenticated on false, but you
//have to override this in CustomIdentity!
//Of course - at this point you also remove the user cookie from response!
}

customIdentity = new CustomIdentity(userData, true);
}
else
{
customIdentity = new CustomIdentity(new UserData {Username = "Anonymous"}, false);
}

HttpContext.Current.User = new CustomPrincipal(customIdentity);

base.OnActionExecuting(filterContext);
}
}

希望对您有所帮助!

不要忘记将此操作过滤器注册为全局过滤器。你可以这样做:

    private static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new LoadCustomPrincipalAttribute());
}

只是补充一下。别管 AuthorizeAttribute。它应该按预期工作。它只是检查 HttpContext.Current.User.Identity.IsAuthenticated == true 条件。在某些情况下您需要覆盖它,但这不是唯一的情况。在 AuthorizeAttribute 启动之前,您确实需要适当的用户/授权处理。

关于asp.net-mvc - 扩展 AuthorizeAttribute 以检测登录的非用户(如何处理用户授权),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15313973/

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