exp имеет тип NumericDate: это секунды с 1970-01-01T00:00:00Z без учёта високосных секунд, а не миллисекунды (значение из 13 цифр — частая ошибка из-за Date.now() в JavaScript). Токен недействителен, если текущее время больше или равно exp; проверяющая сторона может допускать небольшой запас, обычно одну-две минуты, на расхождение часов. Связанные утверждения — nbf (not before, «не раньше») и iat (issued at, время выдачи).
Делайте токены доступа короткоживущими (минуты), потому что выданный bearer-токен нельзя отозвать, а для долгого доступа используйте токены обновления или повторную аутентификацию. Ошибки вроде jwt expired или Signature has expired означают, что проверяющая сторона сравнила exp со своими часами; прежде чем винить издателя, проверьте часы на обеих сторонах.