ПРИМЕЧАНИЕ. У меня было 4 щедрости на этот вопрос, но ни один из приведенных ниже ответов не является ответом, необходимым для этого вопроса.Все, что нужно, находится в обновлении 3 ниже, просто ищите код Laravel для реализации.
ОБНОВЛЕНИЕ 3: Эта блок-схема точно поток, который я пытаюсьдля достижения цели, все ниже - оригинальный вопрос с некоторыми более старыми обновлениями.Эта блок-схема суммирует все необходимое.
Зеленые части в блок-схеме ниже - это те части, которые я знаю, как делать.Красные части вместе с примечаниями к ним - вот то, что я ищу, чтобы помочь с использованием кода Laravel.
Я сделал многоисследования, но информация всегда была короткой и неполной, когда дело доходит до использования Laravel с cookie-файлом JWT httponly для самопотребляющего API (большинство онлайн-уроков показывают только то, что JWT хранится в локальном хранилище, которое не очень безопасно).Похоже, что файл cookie httponly, содержащий JWT by Passport, должен использоваться для идентификации пользователя на стороне Javascript при отправке каждого запроса на сервер для проверки того, что пользователь является тем, кем, по его словам, он является.
Есть такженекоторые дополнительные вещи, которые необходимы, чтобы иметь полное представление о том, как заставить эту установку работать, с которой я не сталкивался ни в одном учебнике, который покрывает это:
- Laravel Passport (не Tymon Auth) длясгенерируйте зашифрованный JWT и отправьте его как файл cookie httponly в качестве ответа после входа в систему со стороны JS.Какое промежуточное программное обеспечение использовать?Если токены обновления повышают безопасность, как реализовать?
- JavaScript (например, axios) псевдокод API, который выполняет вызов конечной точки аутентификации, как cookie httponly передается в бэкэнд и как действительный токен проверки бэкэнда действителен.
- Если одна учетная запись вошла с нескольких устройств, то устройство украдено, как отозвать доступ со всех авторизованных пользовательских устройств (если пользователь меняет пароль с зарегистрированного устройства, которым он управляет)?
- Что бы выглядело как методы входа / регистрации, выхода из системы, смены пароля, забытого пароля для создания / проверки / отзыва токенов?
- Интеграция токенов CSRF.
Я надеюсь, что ответ на этот вопрос послужит простым руководством для будущих читателей и тех, кто в данный момент пытается найти ответ, охватывающий вышеизложенные вопросы, в самостоятельном API.
ОБНОВЛЕНИЕ1:
- Обратите внимание, что я пробовал
CreateFreshApiToken
раньше, но это не сработало, когдаречь идет об отзыве токенов пользователя (для пунктов 3 и 4 выше).Это основано на этом комментарии основного разработчика laravel, когда речь идет о CreateFreshApiToken
промежуточном программном обеспечении:
токены JWT, созданные этим промежуточным ПО, нигде не хранятся,Они не могут быть отозваны или «не существуют».Они просто предоставляют способ авторизации ваших вызовов API через cookie-файл laravel_token.Это не связано с токенами доступа.Кроме того: обычно вы не используете токены, выпущенные клиентами в том же приложении, которое их выпускает.Вы бы использовали их в первом или стороннем приложении.Либо используйте промежуточное программное обеспечение, либо клиент выдал токены, но не оба одновременно.
Так что, кажется, можно удовлетворить пункты 3 и 4, чтобы отозвать токены, это невозможно сделать, еслис использованием промежуточного программного обеспечения CreateFreshApiToken
.
На стороне клиента кажется, что
Authorization: Bearer <token>
- это не тот путь, когда имеешь дело с безопасным файлом cookie httpOnly.Я думаю, что запрос / ответ должен включать в себя защищенный файл cookie httpOnly в качестве заголовка запроса / ответа, например, на основе документов laravel:
При использовании этого метода аутентификации по умолчаниюСтроительные леса JavaScript Laravel инструктируют Axios всегда отправлять заголовки X-CSRF-TOKEN и X-Requested-With.
headerswindow.axios.defaults.headers.common = {
'X-Requested-With': 'XMLHttpRequest',
'X-CSRF-TOKEN': (csrf_token goes here)
};
Это также причина, по которой я ищу решение, которое охватывает все пункты выше.Извините, я использую Laravel 5.6, а не 5.5.
ОБНОВЛЕНИЕ 2:
Кажется, комбинация Предоставление пароля / Обновление токена - это способидти.Ищите простое руководство по внедрению, используя Предоставление пароля / Обновление маркера * Комбо .
Предоставление пароля: Это предоставление подходит для работы с клиентомчто мы доверяем, как мобильное приложение для нашего собственного сайта.В этом случае клиент отправляет учетные данные пользователя для входа на сервер авторизации, и сервер напрямую выдает токен доступа.
Обновление разрешения токена: Когда сервер выдает токен доступа, он такжеустанавливает срок действия токена доступа.Обновление разрешения токена используется, когда мы хотим обновить токен доступа после его истечения.В этом случае сервер авторизации отправит токен обновления при выдаче токена доступа, который можно использовать для запроса нового токена доступа.
Я ищу простой в реализации, простой, целостныйответьте с помощью комбо Password Grant / Refresh Token Grant , которое охватывает все части вышеуказанных оригинальных 5 пунктов с помощью httpOnly secure cookie, созданием / отзывом / обновлением токенов, созданием cookie для входа в систему, отзывом cookie для выхода из системы, методами контроллера,CSRF и т. Д.