【问题标题】:JWT token and Owin authenticationJWT 令牌和 Owin 身份验证
【发布时间】:2016-05-24 17:19:02
【问题描述】:

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

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

问题是,我无法拦截 MVC 管道中的调用以将令牌添加到 httpHeader。它总是将我引导回登录页面。当我使用 POSTMAN 工具时,情况并非如此。我尝试在以下几点注入令牌失败:

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

在上述所有情况下,我都会触发事件,因为我可以调试。我强烈怀疑我在设置标头之前达到了授权点,但我无法弄清楚正确拦截 HttpContext 对象并注入授权标头的流程顺序。

【问题讨论】:

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


    【解决方案1】:

    认证成功后,添加

    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。您的所有请求将随后获得授权。

    【讨论】:

      猜你喜欢
      • 2017-10-22
      • 2018-05-07
      • 2020-07-07
      • 2019-08-04
      • 2019-01-22
      • 2020-08-23
      • 1970-01-01
      • 2018-06-03
      • 2019-02-27
      相关资源
      最近更新 更多