JWT令牌和Owin身份验证

时间:2016-05-24 17:19:02

标签: asp.net-mvc asp.net-web-api owin jwt

我有使用WebApi 2应用程序进行身份验证和授权的MVC前端应用程序。我正在使用JWT令牌。到目前为止,我已经能够成功验证并接收一个令牌......我可以通过使用POSTMAN工具向头部添加授权令牌来进一步访问受限资源([Authorize]属性)。

Authorization: “Bearer <jwt.token.string>”

问题是,我无法拦截MVC管道中的调用以将令牌添加到httpHeader。它总是将我回到登录页面。不是我使用POSTMAN工具时的情况。我没有成功尝试在以下几点注入令牌:

  • 使用自定义实现扩展Authorize属性
  • 添加自定义ActionFilterAttribute
  • 添加自定义DelegatingHandler
  • 在Startup.cs中使用StageMarker(PipelineStageAuthenticate)的Owin管道

在上述所有情况下,我都会参加活动,因为我可以调试。我强烈怀疑在设置标题之前我正在访问授权点,但是我无法弄清楚正确拦截HttpContext对象并注入Authorization标头的流程序列。

1 个答案:

答案 0 :(得分:0)

验证成功后,添加

var ctx = Request.GetOwinContext();
            var authenticateResult = await ctx.Authentication.AuthenticateAsync(DefaultAuthenticationTypes.ExternalBearer);
            ctx.Authentication.SignOut(DefaultAuthenticationTypes.ExternalBearer);
            var applicationCookieIdentity = new ClaimsIdentity(authenticateResult.Identity.Claims, DefaultAuthenticationTypes.ApplicationCookie);
            ctx.Authentication.SignIn(applicationCookieIdentity);

这将创建一个签名cookie,您的Authorize属性将自动读取cookie。您的所有请求将随后获得授权。