【问题标题】:Laravel Passport Authenticate User Before AuthorizeLaravel Passport 在授权之前对用户进行身份验证
【发布时间】:2017-08-27 14:54:07
【问题描述】:

我正在开展一个项目,其中 3rd 方应用程序可以从 Laravel 服务器访问数据。我还在 laravel 中创建了一个客户端应用程序进行测试。

以下代码要求授权并且工作正常。

Route::get('/applyonline', function () {
$query = http_build_query([
    'client_id' => 5,
    'redirect_uri' => 'http://client.app/callback',
    'response_type' => 'code',
    'scope' => '',
]);
return redirect('http://server.app/oauth/authorize?'.$query);
});

如何在授权之前对用户进行身份验证?现在我可以使用此代码访问数据表单服务器。

Route::get('/callback', function (Request $request) {
$http = new GuzzleHttp\Client;
$response = $http->post('http://server.app/oauth/token', [
    'form_params' => [
        'grant_type' => 'password',
        'client_id' => 2,
        'client_secret' => 'fcMKQc11SwDUdP1f8ioUf8OJwzIOxuF8b2VKZyip',
        'username'=> 'ali@gmail.com',
        'password' => 'password',
    ],
]);

$data = json_decode((string) $response->getBody(), true);
$access_token = 'Bearer '. $data['access_token'];
$response =  $http->get('http://server.app/api/user', [
    'headers' => [
        'Authorization' =>  $access_token
    ]
]);

$applicant = json_decode((string) $response->getBody(), true);

return view('display.index',compact('applicant'));

});

虽然上面的代码运行良好,但我认为它不是在客户端询问用户名和密码的好方法。

我想使用这个流程(与 facebook 允许的相同)

  • 点击从服务器获取数据
  • 输入用户名和密码
  • 授权应用
  • 经过身份验证的用户访问数据

【问题讨论】:

    标签: laravel laravel-passport


    【解决方案1】:

    这是一个愚蠢的错误。它适用于 authorization_code 授权类型。我的错误是我在没有注销的情况下在同一个浏览器中测试服务器和客户端。所以客户端正在从服务器访问自己的数据。这个流程图也真的帮助我理解了护照授权的过程。 http://developer.agaveapi.co/images/2014/09/Authorization-Code-Flow.png

     Route::get('/callback', function (Request $request) {
    $http = new GuzzleHttp\Client;
    $response = $http->post('http://server.app/oauth/token', [
        'form_params' => [
            'grant_type' => 'authorization_code',
            'client_id' => 5,
            'client_secret' => 'fcMKQc11SwDUdP1f8ioUf8OJwzIOxuF8b2VKZyip',
            'redirect_uri' => 'http://client.app/callback',
            'code' => $request->code,
        ],
    ]);
    return json_decode((string) $response->getBody(), true);});
    

    【讨论】:

    • 很高兴你自己找到了它
    猜你喜欢
    • 2017-08-18
    • 1970-01-01
    • 1970-01-01
    • 2019-01-31
    • 1970-01-01
    • 2023-01-26
    • 2019-12-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多