Спасибо за общий обзор, проголосовал как хорошая информация. Однако я все еще ищу руководство по внедрению Laravel 5.6. Поскольку ни один из ответов пока не охватывает все, только части здесь и там, но не реализуемый пароль предоставляет httpOnly безопасный поток реализации cookie: /

ЧАНИЕ: у меня было 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:

КажетсяПредоставление пароля / Обновление предоставления токена комбо это путь. Ищете простое руководство по внедрению, используяПредоставление пароля / Обновление предоставления токена комбо.

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

Обновить Токен Грант: Когда сервер выдает токен доступа, он также устанавливает срок действия токена доступа. Обновление разрешения токена используется, когда мы хотим обновить токен доступа после его истечения. В этом случае сервер авторизации отправит токен обновления при выдаче токена доступа, который можно использовать для запроса нового токена доступа.

Я ищу простой в реализации, прямой, целостный ответ, используяПредоставление пароля / Обновление предоставления токена Комбинирование, которое охватывает все части вышеуказанных исходных 5 пунктов с использованием только защищенных файлов cookie httpOnly, создания / отзыва / обновления токенов, создания файлов cookie для входа в систему, отзыва файлов cookie для выхода из системы, методов контроллера, CSRF и т. д.

Ответы на вопрос(4)

Ваш ответ на вопрос