我正在使用WebSecurity进行身份验证,使用自定义ClaimsAuthorizationManager
进行授权。
将基于声明的授权与用于身份验证的内置WebSecurity功能相混合为我提供了大量价值。我强烈推荐那些需要从多个系统组合的复杂授权逻辑的人。
无论如何,除了RememberMe功能外,一切都很顺利。
当用户登录时,我设置了我的身份验证cookie(通过WebSecurity),新建了我的ClaimsPrincipal
,并将其写入我的SessionSecurityToken
。 Bam,它的工作非常出色。
但是,当用户先前已选择保留(Websecurity)身份验证cookie时,她可以绕过我的登录方法,该方法会向我的ClaimsPrincipal
发布消息并将我的主体写入我的SessionSecurityToken
。我的授权因为我的申请未被加载而失败,因为我没有机会改变我的ClaimsPrincipal
。
有没有办法挂钩(Websecurity)“表单身份验证cookie读取”事件?如果是这样,我可以处理它,新建我的ClaimsPrincipal
,然后加入我的办法。提前谢谢!
答案 0 :(得分: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()
{
...
}