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

Posted

技术标签:

【中文标题】Laravel/Lumen Auth JWT 令牌在后续请求中无效,它可能已过期吗?【英文标题】:Laravel/Lumen Auth JWT token not valid in subsequent requests, is it possibly expired? 【发布时间】:2019-02-14 12:22:15 【问题描述】:

我有一个使用 Laravel/Lumen 及其 Auth guard 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

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

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

【问题讨论】:

【参考方案1】:

您可以访问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 令牌在后续请求中无效,它可能已过期吗?的主要内容,如果未能解决你的问题,请参考以下文章

Auth 尝试方法在 Laravel/Lumen + JWT + 用户自定义模型中如何工作

获取经过身份验证的用户 Laravel/Lumen Passport

Laravel/Lumen Tymon/JWT 通过电话号码和密码

Envoy 验证 Jwt 失败

使用 slim-jwt-auth 生成令牌

使用slim-jwt-auth生成令牌