我按照Laracast : What's New in Laravel 5.3: Laravel Passport中提到的确切步骤使用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
请求,并提供要存储的信息。
答案 0 :(得分:2)
问题是我在提到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
1}}文件。
这应该可以解决错误。但是,它可能会引发另一个错误 - HttpFoundationFactory
未找到。
在composer.json
中,使用require
部分中的以下内容更新文件:
"symfony/psr-http-message-bridge": "0.2"
并运行composer update
。
你现在好了。
答案 1 :(得分:0)
您可能要重新安装Laravel项目或重新安装护照吗?
检查所有位置client_id
和client_secret
是否相同:“。env”文件,“oauth_clients”数据库表,以及代码部分:
'client_id' => ....,
'client-secret' => ......
如果它不同,则将“oauth_clients”数据库表中的client_id
和client_secret
复制并粘贴到适当参数的代码中(client_id,client_secret)。