Ответы пользователя по тегу API
  • Зачем Bearer token принято так нумеровать?

    @Barmunk
    К примеру, в Laravel sanctum этот номер является id в таблице токенов.
    На основе этого, можно написать метод по поиску инстанса модели по токену.

    public static function findToken($token)
        {
            if (strpos($token, '|') === false) {
                return static::where('token', hash('sha256', $token))->first();
            }
    
            [$id, $token] = explode('|', $token, 2);
    
            if ($instance = static::find($id)) {
                return hash_equals($instance->token, hash('sha256', $token)) ? $instance : null;
            }
        }

    https://github.com/laravel/sanctum/blob/2.x/src/Pe...
    Ответ написан
    4 комментария
  • Как правильно обновлять jwt?

    @Barmunk
    У токена должен быть короткий срок жизни, к примеру 60 минут. После того, как токен протухнет у вас есть 2 выбора:

    1. Авторизоваться заново по логину паролю и получить новый токен на 60 минут. В этом случае срок жизни токена минимален и можно не заботиться о его краже. Авторизация проходит раз в час, что усложняет кражу пароля, но если его и украдут, то срок жизни токена мизерный.

    2. Воспользоваться методом рефреша просроченного токена. При этом такую возможность нужно ограничить временем, к примеру максимум 14 дней после истечения существующего токена.

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

    Я для себя выбрал первый вариант с возможностью выхода из сессии для особых параноиков. Если текущий токен будет украден, то клиент меняет пароль, а его выданный токен заносится в черный список. Через 60 минут можно считать, что клиента мы защитили. А рефреш я не стал делать, потому что в случае кражи могу не уследить за выданными или обновленными токенами.
    Ответ написан