C# 如何使用JWT+;HttpOnly Cookie?

C# 如何使用JWT+;HttpOnly Cookie?,c#,authentication,asp.net-core,cookies,jwt,C#,Authentication,Asp.net Core,Cookies,Jwt,受文档和主题的启发,我已经使用JWT+HttpOnly Cookies成功地在我的AspNetCore API应用程序中设置了身份验证 现在我正在尝试集成刷新令牌功能。 我已经找到了教程,但它是基于仅JWT的身份验证的,而且我还停留在应该在响应中添加令牌过期头的位置: options.Events = new JwtBearerEvents { OnAuthenticationFailed = context => { if (context.Excepti

受文档和主题的启发,我已经使用JWT+HttpOnly Cookies成功地在我的AspNetCore API应用程序中设置了身份验证

现在我正在尝试集成刷新令牌功能。 我已经找到了教程,但它是基于仅JWT的身份验证的,而且我还停留在应该在响应中添加令牌过期头的位置:

options.Events = new JwtBearerEvents
{
    OnAuthenticationFailed = context =>
    {
        if (context.Exception.GetType() == typeof(SecurityTokenExpiredException))
        {
            context.Response.Headers.Add("Token-Expired", "true");
        }
        return Task.CompletedTask;
    }
};
因为我使用的是基于cookie的身份验证,所以我使用了OnRedirectToLogin事件而不是OnAuthenticationFailed事件,并且context.Exception.GetType()方法对我不可用。 所以我不知道如何判断是否需要刷新令牌

我怎样才能解决这个问题

更新1

这就是我实际做的:

options.Events.OnRedirectToLogin = context =>
{
   if (context.Request.Path.StartsWithSegments("/api"))
      context.Response.StatusCode = (int)HttpStatusCode.Unauthorized;
   else
      context.Response.Redirect(context.RedirectUri);

   return Task.FromResult(0);
};

这里是我想添加令牌过期标头的地方,但基于什么?

使用中间件将cookie添加到承载标头,如下所示:

        app.Use(async (context, next) =>
        {
            var token = context.Request.Cookies["access_token"];
            if (!string.IsNullOrEmpty(token)) context.Request.Headers.Add("Authorization", "Bearer " + token);
            await next();
        });

正确的。。因此,基本上您不需要重定向到登录,只需返回带有该头的401结果?如果没有提供访问令牌或它无效(我已经这样做了),我必须返回没有任何特定头的401,如果访问令牌过期,则返回带有令牌过期头的401,以通知客户端请求刷新令牌。