0

我在 Laravel 5.3 中使用 Passport Authentication API。我创建了两条路由,一条用于生成 oauth 客户端,第二条用于请求 access_token。但是我从路由中获取 NULL 值/gen_client并从路由显示登录页面/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'];  
}

);

4

1 回答 1

0

您的gen_client路线没有返回任何内容,因此它将返回NULL

通过尝试引入自己的ID并直接使用该oauth_clients表,您也会有些混淆。

对 POST /oauth/clients 的调用将返回一个有效负载,其中包括客户端的IDSecret

然后,您将这些值放入config某处,并像这样使用它们(以及您正在进行的调用所需的其他参数):

[
    'client_id' => config('services.myoauth.client_id'),
    'client_secret' => config('services.myoauth.client_secret'),
]

不要oauth_clients直接访问表,这是OAuth服务器的工作。

创建客户端(通常)是在将 OAuth 客户端 Web 应用程序连接到 OAuth 服务器时手动完成的事情。

于 2017-07-07T09:38:10.487 回答