Laravel / Lumen Auth JWT令牌在后续请求中无效,是否可能已过期?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Laravel / Lumen Auth JWT令牌在后续请求中无效,是否可能已过期?相关的知识,希望对你有一定的参考价值。

我有一个应用程序使用Laravel / Lumen及其Auth后卫JWT令牌进行登录。

我发送请求

  http://myserver.com/authenticate

我收到了一个令牌作为回应。

然后当我在后续请求中使用此令牌时

  http://myserver.com/users

使用标题中的标记

  Authorization  :  Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzUxMiJ9.eyJpc3MiOiJjbG96ZXJ0b29sc1YyIiwianRpIjoiNTBiMjE1MjllZGIxMmI4OGJlYTJmOTQxMTViNjc2NmYiLCJpYXQiOjE1MzY1NTU3NzEsIm5iZiI6MTUzNjU1NTc3NiwiZXhwIjoxNTM2NTcwOTc2LCJkYXRhIjp7ImVtYWlsIjoia3lsZWtvb3BtYW5AZ21haWwuY29tIiwiYXZhdGFyIjoiIiwiZmlyc3RfbmFtZSI6Ikt5bGUiLCJsYXN0X25hbWUiOiJLb29wbWFuIiwiaWQiOjMzNH0sInN1YiI6MzM0fQ.p20K56BW0c_J-xlk9gV6wDFafxgNuKUOmgk-4ExKhh9qPw79R0bpm-QbnVQFtYlatB_MjLYK1NdUt5GlGaOE9w

该请求显然通常带有200,(在我的本地服务器上)但是,在我的生产服务器上,所有后续请求与提供的令牌返回401 / Unauthorized

两台服务器上的所有设置都相同。

我的生产服务器和本地服务器上的.env中都有这个。

 JWT_KEY=yUyg2oo3M2N0Lf0CnsbG1ztsL1ovA70K
 JWT_EXPIRE_AFTER=15200
 JWT_ISSUER=mysite
 JWT_ID_FIELD=id
 JWT_NBF_DELAY=25
 DB_TIMEZONE=+00:00
 APP_TIMEZONE=UTC

我的假设是它与到期和/或服务器时间有关。 就像我认为令牌回来已经过期,因此在后续请求中它是无效的。

我是否认为这是问题所在?我该如何修复/测试呢?

答案

您可以访问https://jwt.io并将您的令牌粘贴到编码字段中以获取过期日期,然后在开发人员控制台中进行检查

const currentTime = Date.now() / 1000

if( exp < currentTime) {
  // is expired
}

我的代码中有类似的东西:

const checkExpiredJwtDate = token => {
  const base64Url = token.split('.')[1];
  const base64 = base64Url.replace(/-/g, '+').replace(/_/g, '/');
  const jwtObject = JSON.parse(window.atob(base64))
  const currentTime = Date.now() / 1000;
  if (jwtObject.exp < currentTime) {
    // is expired...
  }
};

How to decode jwt token in javascript

以上是关于Laravel / Lumen Auth JWT令牌在后续请求中无效,是否可能已过期?的主要内容,如果未能解决你的问题,请参考以下文章

Laravel/Lumen Auth JWT 令牌在后续请求中无效,它可能已过期吗?

在 jwt-auth laravel 中获取自定义声明

Lumen:jwt-auth 不存在方法句柄,已完成中间件

仅使用 Lumen 中的电子邮件登录 (JWT Auth)

在没有 Lumen/Laravel 会话的情况下使用 Lumen + Dingo + JWT

在 Lumen 5.4 中注销后 JWT Auth 令牌不会失效