9

我遵循了Laracast 中提到的确切步骤:Laravel 5.3 中的新增功能:Laravelapi authentication Passport使用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包含要存储的信息的请求。

4

2 回答 2

4

问题是Redirect URL我在创建时提到的OAuth Client与我需要的不同。在教程之后,我提到http://api.xyz.com/callback应该http://offline.xyz.com/callback.

如果您已经实现了vue组件,请使用创建的Edit选项Oauth Client。适当更改重定向 URL。

此外,请确保表中的id字段和redirect字段包含与文件中路由描述中oauth-clients提到的相同的值。 /callbackroutes/web.php

这应该可以修复错误。但是,它可能会引发另一个错误 -HttpFoundationFactory未找到。

composer.json中,使用部分中的以下内容更新文件require

"symfony/psr-http-message-bridge": "0.2"

并运行composer update

你现在可以走了。

于 2016-09-05T12:04:24.237 回答
2

可能是您要重新安装 Laravel 项目或重新安装护照?检查您的client_idclient_secret在所有地方是否相同:“.env”文件、“oauth_clients”数据库表以及您的代码部分:

   'client_id' => ....,
   'client-secret' => ......

如果它不同,则将“oauth_clients”数据库表复制并粘贴到您的代码中以获得适当的参数(client_id,client_secret)client_idclient_secret

于 2017-05-30T14:42:17.840 回答