【问题标题】:ASP.NET MVC 4 Read Persistent Auth Cookie Event?ASP.NET MVC 4 读取持久身份验证 Cookie 事件?
【发布时间】:2013-08-26 18:46:20
【问题描述】:

我使用 WebSecurity 进行身份验证,使用自定义 ClaimsAuthorizationManager 进行授权。

将基于声明的授权与用于身份验证的内置 WebSecurity 功能相结合,为我提供了很多价值。对于需要从多个系统组合复杂的授权逻辑的人,我强烈推荐它。

无论如何,除了 RememberMe 功能之外,一切都运行良好。

当用户登录时,我设置我的身份验证 cookie(通过 WebSecurity),新建我的 ClaimsPrincipal,并将其写入我的 SessionSecurityToken。 Bam,它工作得很好。

但是,当用户先前选择保留 (Websecurity) 身份验证 cookie 时,她可以绕过我的登录方法,该方法会更新我的 ClaimsPrincipal 并将我的主体写入我的 SessionSecurityToken。我的授权失败,因为我的声明尚未加载,因为我没有机会转换我的 ClaimsPrincipal

有没有办法挂钩(网络安全)“表单身份验证 cookie 读取”事件?如果是这样,我可以处理它,更新我的 ClaimsPrincipal,然后继续。提前致谢!

【问题讨论】:

    标签: asp.net-mvc-4 cookies forms-authentication claims-based-identity


    【解决方案1】:

    你可以写一个自定义的AuthorizeAttribute

    public class MyAuthorizeAttribute : AuthorizeAttribute
    {
        protected override bool AuthorizeCore(HttpContextBase httpContext)
        {
            var authorized = base.AuthorizeCore(httpContext);
            if (authorized)
            {
                httpContext.User = new ClaimsPrincipal(...)
            }
    
            return authorized;
        }
    }
    

    现在用这个自定义属性而不是默认的内置属性来装饰受保护的控制器操作:

    [MyAUthorize]
    public ActionResult Protected()
    {
        ...
    }
    

    【讨论】:

    • @Darin,不错。如果我在默认情况下使用全局过滤器阻止所有内容,并且仅将登录控制器的“AllowAnonymous”列入白名单,该怎么办?我猜同样的原理,在 FilterConfig 类中我会注册 filters.Add(new MyAUthorizeAttribute()) 。正确吗?
    猜你喜欢
    • 1970-01-01
    • 2018-02-24
    • 1970-01-01
    • 1970-01-01
    • 2012-08-01
    • 2017-10-26
    • 2019-03-22
    • 1970-01-01
    • 2011-06-11
    相关资源
    最近更新 更多