Я выполнил точные шаги, упомянутые в Laracast: Что нового в Laravel 5.3: Laravel Passport для реализации api authentication
с использованием oauth2
.
Мой файл web.php
в проекте client / consumer выглядит так:
use Illuminate\Http\Request; Route::get('/', function () { $query = http_build_query([ 'client_id' => 2, 'redirect_uri' => 'http://offline.xyz.com/callback', 'response_type' => 'code', 'scope' => '', ]); return redirect ('http://api.xyz.com/oauth/authorize?'.$query); }); Route::get('/callback', function (Request $request){ $http= new GuzzleHttp\Client; $response = $http->post('http://api.xyz.com/oauth/token',[ 'form_params' => [ 'grant_type' => 'authorization_code', 'client_id' => 2 , 'client_secret' => 'tUGYrNeWCGAQt220n88CGoXVu7TRDyZ20fxAlFcL' , 'redirect_uri' => 'http://offline.xyz.com/callback', 'code' => $request->code, ], ]); return json_decode((string) $response->getBody(), true); });
Я получаю страницу запроса разрешения, где мне нужно authorize
чтобы позволить моему клиенту получить доступ к api. Но, как только я нажму авторизовать, меня перенаправляют на страницу, где отображается следующее сообщение:
{"error":"invalid_client","message":"Client authentication failed"}
Как это решить?
Я не устанавливал laravel/passport
в автономном проекте. Я что-то упускаю? Я следил и реализовал то, что конкретно было упомянуто в видеоуроке. Должен ли я включать что-то еще, о чем я не знаю? (У меня есть очень базовые знания по oauth2).
Если это помогает, я пытаюсь внедрить автономную систему, которая будет периодически отправлять данные в онлайн-систему, когда есть подключение к Интернету. Поэтому я подумал, что могу создать api
и отправить запрос на отправку с информацией, которая будет храниться.
Проблема заключалась в том, что Redirect URL
который я упомянул при создании OAuth Client
отличается от того, что мне нужно. После учебника я упомянул http://api.xyz.com/callback
который должен был быть http://offline.xyz.com/callback
.
Если вы внедрили компоненты vue
, используйте параметр « Edit
для созданного Oauth Client
. Правильно измените URL-адрес переадресации.
Кроме того, убедитесь, что поле id
поле redirect
в oauth-clients
содержат те же значения, что указаны в описании маршрута для /callback
в вашем файле routes/web.php
.
Это должно исправить ошибку. Однако это может вызвать еще одну ошибку – HttpFoundationFactory
не найден.
В composer.json
обновите файл в разделе require
:
"symfony/psr-http-message-bridge": "0.2"
и запустить composer update
.
Тебе хорошо идти.
Может быть, вы переустановите свой проект Laravel или переустановите паспорт? Убедитесь, что ваши client_id
и client_secret
одинаковы во всех местах: файл «.env», таблица базы данных «oauth_clients» и в вашей части кода:
'client_id' => ...., 'client-secret' => ......
В случае, если это другое, тогда скопируйте и вставьте client_id
и client_secret
из таблицы данных datatbase «oauth_clients» в свой код для соответствующих параметров (client_id, client_secret).