Понимание проблемы Laravel 6.0 Паспорт с паролем Предоставление потока токенов - PullRequest
0 голосов
/ 01 апреля 2020

У меня проблемы с пониманием всего процесса аутентификации клиента для использования моего API, построенного на Laravel. Некоторые вещи просто не нажимают на меня прямо сейчас.

Я пытаюсь реализовать API и сервер OAuth на Laravel. API будет использоваться собственным мобильным приложением, которому доверяют. Поток, который имеет для меня больше смысла, - это «Большой токен пароля», как описано в документах Passport Laravel: https://laravel.com/docs/7.x/passport#password -grant-tokens

Как я понимаю реализацию:

  1. Пользователь устанавливает мое мобильное приложение.
  2. После установки ему предлагается ввести "имя пользователя / пароль", чтобы продолжить использовать приложение
  3. После нажатия кнопки отправки я отправляю запрос POST к моей Laravel реализации oAuth-сервера на "/ oauth / token" с "grant_type", "client_id", "username", "password", "scope". Я опускаю "client_secret", потому что понимаю, что хранить секрет на клиентском устройстве не очень хорошая идея.
  4. Затем сервер проверяет уже созданный (`php ремесленный паспорт: client --password`)" client_id "," username "," password "и" response_type "
  5. Если все соответствует, генерирует токен и отвечает "acces_token" & "refresh_token"
  6. Теперь я могу делать вызовы на конечные точки моего API "/ api / what / method_name"

Моя проблема в пункте 4. Я могу выдать токен доступа, только если пользователь уже существует в моей базе данных, но я предполагаю, что это первый раз, когда пользователь использует мое приложение. postman_response

Нужен ли мне также шаг «аутентификации», когда пользователь отправляет имя пользователя / пароль, а сервер OAuth предлагает «авторизовать приложение» для использования ваших данных, и на этом этапе сохранить пользователя в базе данных и только потом продолжить?

1 Ответ

0 голосов
/ 02 апреля 2020

Обычно у вас есть маршрут регистрации, то есть без авторизации, иначе у вас нет входа в приложение. Представьте себе ваш файл маршрутов.

Route::middleware('auth:api')->group(function () {
       Route::post('/todos', 'TodoController@index');
});

// Without auth
Route::post('/register', 'RegisterController@register');

Для сокрытия учетных данных часто проще использовать прокси-подход, поэтому вы можете использовать backend для client_id и client_secret, поскольку он всегда будет одинаковым (если вы не создаете oauth server).

Route::post('/login', 'LoginController@login');

Для получения имени пользователя и пароля внутренне вызовите oauth / token, добавьте в процесс client_id и client_secret и верните токен. Чтобы сохранить некоторые вызовы через регистрацию, вы можете сделать тот же подход после регистрации, получить токен oauth с учетными данными, имеющимися у вас при регистрации, и немедленно вернуть токен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...