0

Laravel 5.3 で Passport Authentication API を使用しています。1 つは oauth クライアントを生成するため、もう 1 つは access_token を要求するための 2 つのルートを作成しました。しかし、ルートから 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ます。

また、独自のIDoauth_clientsを導入してテーブルを直接使用しようとすることで、やや混乱しています。

POST /oauth/clients への呼び出しは、クライアントのIDSecretを含むペイロードを返します。

次に、これらの値をconfigのどこかに配置し、次のように使用します (呼び出しに必要な他のパラメーターと共に):

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

oauth_clientsテーブルに直接アクセスしないでください。これはOAuthサーバーの仕事です。

クライアントの作成は、(通常) OAuth クライアント webapp を OAuth サーバーに接続するときに一度行う手動の作業です。

于 2017-07-07T09:38:10.487 に答える