我在Laravel 5.3中使用Passport Authentication API。我创建了两个路由,一个用于生成oauth客户端,另一个用于请求access_token。但我从/gen_client
路由获取NULL值并显示/redirect
路由的登录页面。
有人可以帮我吗?
Route::get('/gen_client', function () {
$http = new GuzzleHttp\Client();
$response = $http->post(url('/') . '/oauth/clients', [
'form_params' => [
'id' => 'ok@test.com',
'name' => 'OK',
'redirect' => url('/') . '/callback'
],
]);
$response_body = json_decode((string)$response->getBody(), true);
var_dump($response_body);
});
Route::get('/redirect', function () {
$oauth_client = DB::table('oauth_clients')->where('id', '=', 'ok@test.com')->first();
$query = http_build_query([
'client_id' => $oauth_client->id,
'redirect_uri' => $oauth_client->redirect,
'response_type' => 'code',
'scope' => '',
]);
return redirect(url('/') . '/oauth/authorize?'.$query);
});
Route::post('callback', function (Request $request) {
$http = new GuzzleHttp\Client();
$oauth_client = DB::table('oauth_clients')->where('id', '=', 'ok@test.com')->first();
$response = $http->post(url('/') . '/oauth/token', [
'form_params' => [
'grant_type' => 'authorization_code',
'client_id' => $oauth_client->id,
'client_secret' => $oauth_client->secret,
'redirect_uri' => url('/') . '/callback',
'code' => $request->code,
],
]);
$response_body = json_decode((string)$response->getBody(), true);
var_dump($response_body);
$access_token = $response_body['access_token'] ;
$refresh_token = $response_body['refresh_token'];
}
);
答案 0 :(得分:0)
您的gen_client
路由没有返回任何内容,因此会返回NULL
。
通过尝试引入自己的 ID 并直接使用oauth_clients
表,您也会感到困惑。
对POST / oauth / clients的调用将返回一个有效负载,其中包含客户端的 ID 和 Secret 。
然后将这些值放入某处 config ,并像这样使用它们(以及您正在制作的电话所需的其他参数):
[
'client_id' => config('services.myoauth.client_id'),
'client_secret' => config('services.myoauth.client_secret'),
]
请勿直接访问oauth_clients
表,这是 OAuth 服务器的工作。
在将OAuth客户端Web应用程序连接到OAuth服务器时,创建客户端(通常)是一次完成的手动操作。