2

我使用WebSecurity进行身份验证,并使用自定义ClaimsAuthorizationManager进行授权。ASP.NET MVC 4读取持久性Auth Cookie事件?

混合基于声明的授权与内置的认证WebSecurity功能为我提供了大量的价值。我强烈建议任何需要复杂的授权逻辑组合的系统。

无论如何,除了RememberMe功能,一切都很好。

当用户登录时,我将自己的身份验证Cookie(通过WebSecurity)设置为新的我的ClaimsPrincipal,并将其写入我的SessionSecurityToken。巴姆,它工作出色。

但是,当用户以前选择坚持(Websecurity)身份验证cookie时,她被允许绕过我的登录方法,该消息向上我的ClaimsPrincipal并将我的主体写入我的SessionSecurityToken。我的授权失败,因为我的申请没有被加载,因为我没有机会改变我的ClaimsPrincipal

有没有办法挂钩到(Websecurity)“表单身份验证Cookie读取”事件?如果是这样,我可以处理它,新的我的ClaimsPrincipal,并在我的路上。提前致谢!

回答

2

你可以写一个自定义的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() 
{ 
    ... 
} 
+0

热卖!咄。谢谢你,先生。这很好。 – kmehta

+0

@Darin,不错。如果我使用全局过滤器默认阻止了所有内容,并且我仅为“登录”控制器添加了“允许匿名”白名单?我想同样的原则,在F​​ilterConfig类我会注册filters.Add(新MyAUthorizeAttribute())。正确吗? – joedotnot