我有一个关于验证验证令牌的问题。目前,我在/token
生成我的Auth Token并将其发送回客户端,我将其存储在会话存储中。为了使流程尽可能安全,我希望将令牌存储在HttpOnly
和Secure
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);
但是RequestContext
在OnAuthorization
被调用后已经设置,并且它没有更新以使用我添加的新标题。