我正在开发一个第三方应用可以从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允许相同)
答案 0 :(得分:0)
那是一个愚蠢的错误。它与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);});