Я следовал точным шагам, упомянутым в Laracast: Что нового в Laravel 5.3: Паспорт Laravel реализовать api authentication
с помощью oauth2
,
мой web.php
Файл в проекте клиент / потребитель выглядит так:
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
и отправить post
запрос с информацией для хранения.
Проблема была в 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
из таблицы базы данных «oauth_clients» в ваш код для соответствующих параметров (client_id, client_secret).