Laravel 5.3:护照实施 - {"error":"invalid_client","message":"Client authentication failed"}
Laravel 5.3 : Passport Implementation - {"error":"invalid_client","message":"Client authentication failed"}
我按照 Laracast : What's New in Laravel 5.3: Laravel Passport 中提到的确切步骤使用 oauth2
实现 api authentication
。
我在 client/consumer 项目中的 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 有非常基本的了解)。
如果有帮助,我正在尝试实现一个离线系统,该系统会在有 Internet 连接时定期将数据发送到在线系统。所以我想我可以构建一个 api
并发送 post
请求,其中包含要存储的信息。
问题是我在创建 OAuth Client
时提到的 Redirect URL
与我需要的不同。按照教程,我提到了 http://api.xyz.com/callback
, 应该 是 http://offline.xyz.com/callback
。
如果您已经实施了 vue
组件,请为创建的 Oauth Client
使用 Edit
选项。适当更改重定向 URL。
此外,请确保 oauth-clients
table 中的 id
字段和 redirect
字段包含与 [=21] 的路由描述中提到的相同的值=] 在你的 routes/web.php
文件中。
这应该可以修复错误。但是,它可能会引发另一个错误 - HttpFoundationFactory
not found。
在 composer.json
中,在 require
部分更新文件:
"symfony/psr-http-message-bridge": "0.2"
和运行 composer update
.
你现在可以走了。
可能是您要重新安装 Laravel 项目或重新安装通行证?
检查您的 client_id
和 client_secret
在所有地方是否相同:“.env”文件、"oauth_clients" 数据库 table,以及您的代码部分:
'client_id' => ....,
'client-secret' => ......
如果不同,则将 "oauth_clients" 数据库 table 中的 client_id
和 client_secret
复制并粘贴到您的代码中以获得适当的参数(client_id, client_secret).
我按照 Laracast : What's New in Laravel 5.3: Laravel Passport 中提到的确切步骤使用 oauth2
实现 api authentication
。
我在 client/consumer 项目中的 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 有非常基本的了解)。
如果有帮助,我正在尝试实现一个离线系统,该系统会在有 Internet 连接时定期将数据发送到在线系统。所以我想我可以构建一个 api
并发送 post
请求,其中包含要存储的信息。
问题是我在创建 OAuth Client
时提到的 Redirect URL
与我需要的不同。按照教程,我提到了 http://api.xyz.com/callback
, 应该 是 http://offline.xyz.com/callback
。
如果您已经实施了 vue
组件,请为创建的 Oauth Client
使用 Edit
选项。适当更改重定向 URL。
此外,请确保 oauth-clients
table 中的 id
字段和 redirect
字段包含与 [=21] 的路由描述中提到的相同的值=] 在你的 routes/web.php
文件中。
这应该可以修复错误。但是,它可能会引发另一个错误 - HttpFoundationFactory
not found。
在 composer.json
中,在 require
部分更新文件:
"symfony/psr-http-message-bridge": "0.2"
和运行 composer update
.
你现在可以走了。
可能是您要重新安装 Laravel 项目或重新安装通行证?
检查您的 client_id
和 client_secret
在所有地方是否相同:“.env”文件、"oauth_clients" 数据库 table,以及您的代码部分:
'client_id' => ....,
'client-secret' => ......
如果不同,则将 "oauth_clients" 数据库 table 中的 client_id
和 client_secret
复制并粘贴到您的代码中以获得适当的参数(client_id, client_secret).