【发布时间】:2017-01-11 22:50:03
【问题描述】:
我按照Laracast : What's New in Laravel 5.3: Laravel Passport 中提到的确切步骤使用oauth2 实现api authentication。
我在客户端/消费者项目中的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 请求,其中包含要存储的信息。
【问题讨论】:
-
你确定你的client_id是2吗?我没有看教程,但通常 oauth client_ids 不是 db 中的自动增量值。
-
我也实现了
vue组件,在那里我可以看到我拥有的客户列表及其ID。有了这个,我确信我有一个 id = 2 的客户。
标签: php oauth-2.0 laravel-5.3 laravel-passport