Токен laravel / lumen auth jwt недействителен в последующих запросах, возможно, срок его действия истек?

У меня есть приложение, которое использует 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

Я предполагаю, что это как-то связано с истечением срока действия и / или временем сервера. Вроде я думаю, что токен возвращается уже с истекшим сроком, поэтому при последующем запросе он недействителен.

Правильно ли я полагаю, что проблема именно в этом? И как мне это исправить / протестировать?

0
0
348
1

Ответы 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...
  }
};

Как декодировать токен jwt в javascript

Другие вопросы по теме