如何使用 JWT + HttpOnly Cookie 正确刷新令牌?

     2023-03-10     222

关键词:

【中文标题】如何使用 JWT + HttpOnly Cookie 正确刷新令牌?【英文标题】:How to properly refresh a token using JWT + HttpOnly Cookie? 【发布时间】:2020-01-25 21:01:22 【问题描述】:

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

现在我正在尝试集成刷新令牌功能。 我找到了this 教程,但它仅基于 JWT 身份验证,我被困在应该向响应中添加 Token-Expired 标头的地方:

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);
;

这里是我要添加 Token-Expired 标头的地方,但基于什么?

【问题讨论】:

Right.. 所以本质上你需要以某种方式不重定向到登录,而只需返回带有该标题的 401 结果? 当没有提供访问令牌或它无效(我已经这样做)时,我必须返回没有任何特定标题的 401,如果访问令牌已过期,则返回 401 和 Token-Expired 标题,告诉客户端请求刷新令牌。 【参考方案1】:

使用中间件将您的 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();
        );

【讨论】:

如何使用 JWT + HttpOnly Cookie 正确刷新令牌?

】如何使用JWT+HttpOnlyCookie正确刷新令牌?【英文标题】:HowtoproperlyrefreshatokenusingJWT+HttpOnlyCookie?【发布时间】:2020-01-2521:01:22【问题描述】:受this文档和this主题的启发,我已经使用JWT+HttpOnlyCookies在我的AspNetCoreAPI应用程序中成功... 查看详情

如何将 JWT 存储在 HttpOnly Cookie 中?

】如何将JWT存储在HttpOnlyCookie中?【英文标题】:HowtostoreJWTsinHttpOnlyCookies?【发布时间】:2020-12-0903:09:04【问题描述】:我目前正在开发一个React-Django应用程序并使用JWT进行身份验证。经过一番研究,我发现将JWT存储在客户端是... 查看详情

如何使用 DRF djangorestframework-simplejwt 包将 JWT 令牌存储在 HttpOnly cookie 中?

】如何使用DRFdjangorestframework-simplejwt包将JWT令牌存储在HttpOnlycookie中?【英文标题】:HowtostoreJWTtokensinHttpOnlycookieswithDRFdjangorestframework-simplejwtpackage?【发布时间】:2021-05-2016:45:47【问题描述】:我已经使用djangorestframework-simplejwt有... 查看详情

如何提取 Cognito 生成的 JWT,并将其存储为 HTTPonly cookie 并与后续 API 请求一起使用(React)

】如何提取Cognito生成的JWT,并将其存储为HTTPonlycookie并与后续API请求一起使用(React)【英文标题】:HowtoextractaJWTgeneratedbyCognito,andstoreasHTTPonlycookieandusewithsubsequentAPIrequests(React)【发布时间】:2022-01-1704:57:45【问题描述】:我正在... 查看详情

ReactJS 和 DRF:如何将 JWT 令牌存储在 HTTPonly cookie 中?

】ReactJS和DRF:如何将JWT令牌存储在HTTPonlycookie中?【英文标题】:ReactJSandDRF:HowtostoreJWTtokeninsideHTTPonlycookies?【发布时间】:2021-02-1114:43:19【问题描述】:目前,我的Web应用程序具有登录功能,在我发出登录请求后,服务器会使用... 查看详情

在 Django/DRF 中使用 JWT 身份验证并将 JWT 存储在 HttpOnly Cookie 中

】在Django/DRF中使用JWT身份验证并将JWT存储在HttpOnlyCookie中【英文标题】:UsingJWTauthenticationwithDjango/DRFandStoringJWTsinHttpOnlyCookies【发布时间】:2021-06-1808:42:48【问题描述】:我正在尝试在后端使用Django和DRF并在前端使用ReactJs构建一... 查看详情

在 .net core api 中存储/验证存储在 HttpOnly cookie 中的 JWT 令牌

】在.netcoreapi中存储/验证存储在HttpOnlycookie中的JWT令牌【英文标题】:Store/validateJWTtokenstoredinHttpOnlycookiein.netcoreapi【发布时间】:2020-08-0904:11:20【问题描述】:我将基于jwt的身份验证添加到我的api,将令牌添加到标头(授权:Bear... 查看详情

使用 httponly cookie 将 JWT 从节点 REST API 发送到 Vue.js SPA

】使用httponlycookie将JWT从节点RESTAPI发送到Vue.jsSPA【英文标题】:UsinghttponlycookietosendJWTfromnodeRESTAPItoVue.jsSPA【发布时间】:2020-03-1220:16:12【问题描述】:我正在使用express构建一个带有Vue.js前端和NodeRESTAPI的Web应用程序。我正在尝试... 查看详情

用于传递 JWT 的 httpOnly Cookies 与授权标头

】用于传递JWT的httpOnlyCookies与授权标头【英文标题】:httpOnlyCookiesvsAuthorizationheadersforpassingJWT【发布时间】:2022-01-1500:37:15【问题描述】:所以我对通过JWT授权的正确方法有点困惑,我知道一种常见的方法是您可以使用Authorization... 查看详情

如何在身份验证中使用 JWT?

...程序。会话/Cookie的优势易于使用加密防止XSS攻击(带有httpOnly标 查看详情

将 JWT 令牌存储到 HttpOnly cookie 中

】将JWT令牌存储到HttpOnlycookie中【英文标题】:StoringJWTtokenintoHttpOnlycookies【发布时间】:2021-10-1623:34:36【问题描述】:我读了几篇文章,说本地存储不是存储JWT令牌的首选方式,因为它不打算用于会话存储,因为您可以通过JavaSc... 查看详情

Django:使用中间件将 JWT 更新并设置为 HttpOnly cookie。 Response() 返回 django.template.response.ContentNotRenderedE

】Django:使用中间件将JWT更新并设置为HttpOnlycookie。Response()返回django.template.response.ContentNotRenderedError【英文标题】:Django:RenewandsetJWTsasHttpOnlycookieusingamiddleware.Response()returningdjango.template.response.ContentNotRender 查看详情

用于 JWT 刷新令牌的 react-native 中的 httpOnly cookie

】用于JWT刷新令牌的react-native中的httpOnlycookie【英文标题】:httpOnlycookieinreact-nativeforJWTrefresh-token【发布时间】:2020-06-1913:42:06【问题描述】:我有一个快速节点服务器。我只通过httpOnlycookie发送JWT访问令牌作为响应,还发送一个... 查看详情

httpOnly cookie 中的 JWT - AuthGuard 和受保护的路由(Node.js、Angular)

】httpOnlycookie中的JWT-AuthGuard和受保护的路由(Node.js、Angular)【英文标题】:JWTinhttpOnlycookie-AuthGuardandprotectedroutes(Node.js,Angular)【发布时间】:2020-03-2521:34:43【问题描述】:我正在开发我的应用程序,我正在使用JWT进行身份验证和... 查看详情

如何在 ngCookies 中设置 httpOnly 标志?

】如何在ngCookies中设置httpOnly标志?【英文标题】:HowtosethttpOnlyflaginngCookies?【发布时间】:2015-07-2106:05:38【问题描述】:我有一个想要存储在cookie中的JWT令牌。cookie至少需要设置HttpOnly标志,但我还想将Secure标志设置为true。从an... 查看详情

带有 React 和 Node 的 httpOnly cookie

】带有React和Node的httpOnlycookie【英文标题】:httpOnlycookieswithReactandNode【发布时间】:2021-06-2303:54:34【问题描述】:我正在尝试弄清楚如何使用httpOnlycookie和可扩展性可选性来使用React和Node实现身份验证/授权。我读过JWT可以通过使... 查看详情

jwt 通过 httponly cookie 提供服务,以某种方式找出 is-logged-in

】jwt通过httponlycookie提供服务,以某种方式找出is-logged-in【英文标题】:jwtservedviahttponlycookiewithsomewaytofindoutis-logged-in【发布时间】:2020-07-0416:51:56【问题描述】:在构建javascriptSPA(单页应用程序)时,我需要根据用户是否登录... 查看详情

无法在 ASP.NET Core 和 React 中创建包含 jwt 的 httponly cookie

】无法在ASP.NETCore和React中创建包含jwt的httponlycookie【英文标题】:CannotcreatehttponlycookiecontainingjwtinASP.NETCoreandReact【发布时间】:2020-01-2615:17:21【问题描述】:我正在尝试在我的应用中实施身份验证方案。控制器,更具体地说是方... 查看详情