Laravel 5.3 Passport для маршрутов использует веб-связующее ПО

Компонент Laravel 5.3 Passport выглядит довольно круто, но я немного путаюсь с ним.

В документации Passport находится под API-аутентификацией, и, если установить config / auth.php, он изменит драйвер на «паспорт» охранника «api».

В Laravel 5.3 есть web.php и api.php для разных групп маршрутов для использования веб-промежуточного или промежуточного программного обеспечения API.

После установки Passport, есть шаг для добавления Passport: маршруты () в AuthServiceProvider. Когда я запускаю route: list, он покажет, что все новые маршруты используют веб-интерфейс и промежуточное ПО аутентификации.

Мой вопрос, почему эти паспортные маршруты с использованием веб-промежуточного программного обеспечения? Насколько я понимаю, Passport должен работать для аутентификации API без сохранения состояния, а промежуточное веб-программное обеспечение — нет.

3

Решение

Я тоже столкнулся с этой проблемой, пока не понял, что мое понимание принципа работы паспорта неверно.

Паспорт — это предоставление клиентскому приложению данных пользователя с согласия этого пользователя (так работает OAuth2). Поэтому, когда клиентское приложение пытается получить токен доступа, который в конечном итоге предоставит доступ к данным этого пользователя, необходимо получить согласие этого пользователя. Промежуточное веб-программное обеспечение действует как слой для получения согласия этого пользователя. Чтобы подписать согласие, пользователь должен сначала войти в систему, иначе не будет никаких доказательств того, что он является действительным пользователем.

Чтобы лучше понять, рассмотрим сценарий, в котором ваше приложение пытается реализовать функцию «Войти в Google». Вы помещаете кнопку, которая перенаправляет в Google на странице входа в систему, после перенаправления пользователь входит в свою учетную запись Google, подписывает согласие и перенаправляется обратно в ваше приложение с кодом авторизации. Это просто так, здесь Google — это приложение, которое вы создаете, а другое приложение — это клиентское приложение.

Тем не менее лучший способ понять это, если сделать практическую реализацию. Просто создайте новое приложение в laravel и поместите этот код в файл route / web.php.

Route::get('/redirect', function () {
$query = http_build_query([
'client_id' => 'YOUR APP'S CLIENT ID',
'redirect_uri' => 'THE CALLBACK YOU GAVE DURING CREATING THE CLIENT',
'response_type' => 'code',
'scope' => '',
]);

return redirect('http://your-app.com/oauth/authorize?'.$query);
});

Затем посетите новое приложение с /redirect маршрут. Убедитесь, что ваше основное приложение тоже работает.

1

Другие решения

Кажется, я решил это.

Сначала я добавил и настроил промежуточное программное обеспечение CORS. https://github.com/barryvdh/laravel-cors

Затем я обернул маршруты Passport в группу маршрутов, отредактировав приложение / Providers / AuthServiceProvider.php

/**
* Register any authentication / authorization services.
*
* @return void
*/
public function boot()
{
$this->registerPolicies();

Route::group(['prefix' => 'api', 'middleware' => 'cors'], function() {

Passport::routes();

});
}

Теоретически, если вы хотите использовать службу oauth вне вашего API, у вас может быть два экземпляра маршрутов Passport, один с префиксом / api и промежуточным программным обеспечением cors, а другой без, так что вы не потеряете перекрестное происхождение. защита при использовании oauth в браузере.

0

По вопросам рекламы [email protected]