【问题标题】:Laravel 5.3 : Passport Implementation - {"error":"invalid_client","message":"Client authentication failed"}Laravel 5.3 : Passport 实现 - {"error":"invalid_client","message":"Client authentication failed"}
【发布时间】: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


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

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

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

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

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

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

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

    然后运行composer update

    你现在可以走了。

    【讨论】:

    • 您需要指定您尝试实施的授权类型。此修复仅针对授权代码授予类型,并提示更多设置问题。
    • 更改redirect_url 为我修复了它
    • “如果您已经实现了 vue 组件,请使用创建的 Oauth 客户端的编辑选项。适当更改重定向 URL。”是什么意思。我遇到了 Vue 重定向我的问题,但 URL 没有更新,并且所有内容都在一个奇怪的盒子里?
    • @carlos 我指的是 Laravel 附带的用于创建和管理 oauth 客户端的 UI。它们是 Vue 组件。
    猜你喜欢
    • 2018-05-22
    • 2020-04-20
    • 1970-01-01
    • 1970-01-01
    • 2017-06-19
    • 2023-03-25
    • 1970-01-01
    • 1970-01-01
    • 2021-02-02
    相关资源
    最近更新 更多