2016-08-26 4 views
2

Laravel 5.3 Компонент Passport выглядит довольно круто, но у меня есть путаница.Laravel 5.3 Паспортные маршруты используют веб-промежуточное ПО

По документации Паспорт под аутентификацией API, а при настройке config/auth.php он изменяет драйвер на «паспорт» гвардии «api».

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

После установки Passport есть шаг, чтобы добавить Passport: routes() в AuthServiceProvider. Когда я запускаю маршрут: в списке он покажет, что все новые маршруты используются с использованием промежуточного программного обеспечения web и auth.

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

ответ

0

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

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

Тогда я завернула паспортных маршруты в маршрутной группе путем редактирования приложения/Поставщики/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

К сожалению, это не помогло мне вообще. Все, что было сделано, это добавить промежуточное программное обеспечение в уже существующий список посредников. Поэтому вместо того, чтобы менять промежуточное ПО от «web, auth» до «cors», я получил «cors, web, auth». Кажется немного далеким от того, чтобы сделать auth на вещи, которая должна вас заверить :-) –

0

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

Паспорт - это предоставление клиентскому приложению данных пользователя с согласия этого пользователя (как работает 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 маршрута. Убедитесь, что основное приложение запущено.

Смежные вопросы