2017-10-15 2 views
0

OAuth2サーバーからaccess_tokenを取得するときに問題が発生しました。私は、access_tokenはを取得するためにPHPのカールを使用していますが、それは失敗し、返します。PHPのcurlでaccess_tokenを取得するOAuth2 return error: "invalid_client"

curl -d "client_id=f3d259ddd3ed8ff3843839b&client_secret=4c7f6f8fa93d59c45502c0ae8c4a95b&redirect_uri=http://application.dev/oauth/handle&grant_type=authorization_code&code=rZCQQBXVSQqKi2IRro1gYkSsRhyUcLsNODACjwPw" http://oauth-server.dev/oauth/access_token 

それは成功と返す:私は、コマンドプロンプトからカールを使用する場合

error: "invalid_client", 
error_description: "Client authentication failed." 

奇妙で、ありますaccess_tokenは:

"access_token":"fI7APDRZygrsF1BiegAQCS1yUT8vnm1LgD5bIu2U", 
"token_type":"Bearer", 
"expires_in":3600 

私はLaravel 5.2を使用して、ここaccess_tokenは取得するにはOAuthのサーバから処理するために、私のコードですよ:

public function getOAuthHandle(Request $request){ 
    $url = 'http://oauth-server.dev/oauth/access_token'; 
    $code = $request->code; 
    $client_id = 'f3d259ddd3ed8ff3843839b'; 
    $client_secret = '4c7f6f8fa93d59c45502c0ae8c4a95b'; 
    $redirect_uri = 'http://application.dev/oauth/handle'; 

    $clienttoken_post = array(
       "code" => $code, 
       "client_id" => $client_id, 
       "client_secret" => $client_secret, 
       "redirect_uri" => $redirect_uri, 
       "grant_type" => "authorization_code" 
      ); 

      $curl = curl_init($url); 

      curl_setopt($curl, CURLOPT_POST, true); 
      curl_setopt($curl, CURLOPT_POSTFIELDS, $clienttoken_post); 
      curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_ANY); 
      curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); 
      curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); 

      $json_response = curl_exec($curl); 
      curl_close($curl); 

      return $json_response; 
} 

インターネットとstackoverflowから別のスクリプトを試してApacheとPHPを再起動しましたが、それでも動作しません。

この問題を解決する方法はありますか?私は何を確認すべきですか?

ご協力いただきありがとうございます。

+0

あなたはcurlヘッダーにgrant_typeを追加しようとしましたか? –

+0

いいえ、私はそれを試していません。どうやってするか? –

答えて

0

代わりに、カールヘッダーでリクエストを送信してください。

$curl = \curl_init(); 

    \curl_setopt_array($curl, array(
     CURLOPT_URL => $url, 
     CURLOPT_RETURNTRANSFER => true, 
     CURLOPT_ENCODING => "", 
     CURLOPT_MAXREDIRS => 10, 
     CURLOPT_TIMEOUT => 600, 
     CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, 
     CURLOPT_HTTPHEADER => $clienttoken_post, 
     CURLINFO_HEADER_OUT => true, 
    )); 

    $response = \curl_exec($curl); 

のどちらかがそれを試してみるヘッダーにgrant_typeを送った後、client_secretやポストなどclient_id、またはヘッダーにそれらを送りました。そしてbtw。 $request->codeは、curl要求に渡す前にチェックする必要があります。 url, client_secret, client_idはすべて.envに属していて、config/servicesに登録してください。

+0

私はそれを試みますが、 'error:RouteCollection.php行218のMethodNotAllowedHttpException'を返します。 curlに渡す前に '$ request-> code'をチェックするのはどういう意味ですか?どのような点検?次に、 '.env'に'​​ url、client_secret、client_id'を設定しようとしましたが、まだ同じです。 'config/services'はクライアントサーバではなく、OAuthサーバにありますか?私のコードはOAuthサーバーにないクライアントサーバー上でエラーが発生しています。 –

+0

'.env'に'​​ url、client_secret、client_id'を設定し、 'config/services'を通してそれらを取得しなければならない場合、サービスの名前は何ですか?サービスに名前を付けるのは私の責任ですか?そして、私はどのようにサービスからそれらにアクセスできますか? OAuth2で新しくなったので、私のばかげた質問には申し訳ありません。あなたの答えに感謝します。 –

関連する問題