Laravel / Lumen Auth JWT-токен недействителен в последующих запросах, возможно, срок его действия истек? - PullRequest
0 голосов
/ 10 сентября 2018

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

0 голосов
/ 10 сентября 2018

Вы можете посетить 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

...