2

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

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

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

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

但是,当用户之前选择保留 (Websecurity) auth cookie 时,她可以绕过我的登录方法,该方法会通知 myClaimsPrincipal并将我的主体写入 my SessionSecurityToken. 我的授权失败是因为我的声明尚未加载,因为我没有机会转换我的ClaimsPrincipal.

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

4

1 回答 1

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()
{
    ...
}
于 2013-08-23T16:24:46.363 回答