ASP .NET Identity - 如何在自定义过滤器属性

时间:2018-02-09 21:56:00

标签: c# authentication cookies asp.net-identity owin

我有一个关于验证验证令牌的问题。目前,我在/token生成我的Auth Token并将其发送回客户端,我将其存储在会话存储中。为了使流程尽可能安全,我希望将令牌存储在HttpOnlySecure Cookie中以防止XSS。

我发送cookie和XSRF令牌在我的客户端(Angular)我将X-XSRF-TOKEN标头设置为XSRF令牌值。然后浏览器会自动将Auth Cookie发送给我,我可以在那里读取令牌。

我的主要问题是如何提取令牌并对其进行验证?在我使用带有auth_token属性的认证承载[Authorize]之前,但不是现在工作,因为令牌在cookie中。我创建了自己的属性(见下文,但我仍然坚持我实际验证令牌的行。我不确定要调用哪个函数并将令牌传递给它,以验证它。

public class ValidateToken : AuthorizationFilterAttribute
{
    public override void OnAuthorization(HttpActionContext actionContext)
    {
        protected override bool IsAuthorized(System.Web.Http.Controllers.HttpActionContext actionContext)
        {
            var headers = actionContext.Request.Headers;
            CookieHeaderValue authToken = headers.GetCookies().FirstOrDefault();

            CookieState authCookie = authToken.Cookies.Where(p => p.Name == "AUTH-TOKEN").FirstOrDefault();
            if (authCookie.Value is valid -> need help here) {
                actionContext.Response = new HttpResponseMessage(System.Net.HttpStatusCode.Unauthorized);
            }
        }
    }
}

编辑:我已尝试过以下

actionContext.Request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", authCookie.Value);
bool isAuth = base.IsAuthorized(actionContext);

但是RequestContextOnAuthorization被调用后已经设置,并且它没有更新以使用我添加的新标题。

0 个答案:

没有答案