2017-11-15 11 views
1

このドキュメントに従ってTaboola Backstage APIでアクセストークンを取得しようとしています。PHP Curl:セッションが見つかりませんでしたので、提供されたCSRFトークンを確認できませんでした

Backstage API - Authentication and General API Usage.pdf

私のサンプルコードは次のようになります。

$ckfile = tempnam ("/tmp", "CURLCOOKIE"); 

$post = array(
    "client_id"   => "secret" 
    , "client_secret"  => "secret" 
    , "grant_type"   => "client_credentials" 
); 

    $ch = curl_init(); 

    curl_setopt($ch, CURLOPT_COOKIEJAR, $ckfile); 
    curl_setopt($ch, CURLOPT_COOKIEFILE, $ckfile); 
    curl_setopt($ch, CURLOPT_COOKIESESSION, 0); 
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 0); 
    curl_setopt($ch, CURLOPT_USERAGENT, "App Client"); 
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 60); 
    curl_setopt($ch, CURLOPT_HTTPHEADER, array(
      'Content-Type: application/x-www-form-urlencoded' 
    )); 

    curl_setopt($ch, CURLOPT_URL,"https://backstage.taboola.com/backstage/oauth/token/"); 
    curl_setopt($ch, CURLOPT_POST,1); 
    curl_setopt($ch, CURLOPT_POSTFIELDS, $post); 
    curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0); 
    curl_setopt($ch, CURLOPT_VERBOSE, 0); 
    curl_setopt($ch, CURLOPT_HEADER, 0); 
    curl_setopt($ch, CURLOPT_AUTOREFERER, 0); 
    curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1); 

    $result=curl_exec ($ch); 

    $header_size = curl_getinfo($ch, CURLINFO_HEADER_SIZE); 
    $header = substr($result, 0, $header_size); 
    $body = substr($result, $header_size); 

    var_dump($header,$body); 

私は、コードを実行すると、私はエラーメッセージが表示されます。セッションが見つからないため、提供されたCSRFトークンを検証できませんでした。私は行方不明の、私はそれを右のエンドポイントにPOSTで送信します。誰かに私のためのヒントをお願いしますか?

答えて

0

ドキュメントが多少オフになっているようです。私は/backstage/oauth/token(後ろには/)に投稿して、適切なAPI応答を得ることができました。末尾のスラッシュを使用すると、API以外の別のURLにあなたを通過させようとします。

また、POST配列をhttp_build_query()に渡す必要があります。そのため、cURLは、指定された配列からマルチパートフォームポストを作成しません。それはAPIなので、クッキーで何もする必要はありません。私は他のいくつかの不要なオプションも削除しました。ここで

は、あなたがそれを始めるためにいくつかのコードは私のために働いている:

$post = array(
    "client_id"   => "secret", 
    "client_secret"  => "secret", 
    "grant_type"   => "client_credentials", 
); 

$ch = curl_init(); 

curl_setopt($ch, CURLOPT_COOKIESESSION, 0); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 0); 
curl_setopt($ch, CURLOPT_USERAGENT, "App Client"); 
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 60); 
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
     'Content-Type: application/x-www-form-urlencoded', 
     'Accept: application/json', 
)); 

curl_setopt($ch, CURLOPT_URL,"https://backstage.taboola.com/backstage/oauth/token"); 
curl_setopt($ch, CURLOPT_POST,1); 
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($post)); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,true); 
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); 
curl_setopt($ch, CURLOPT_VERBOSE, 0); 
curl_setopt($ch, CURLOPT_HEADER, 0); 
curl_setopt($ch, CURLOPT_AUTOREFERER, 0); 

$result=curl_exec ($ch); 

$info = curl_getinfo($ch); 
$response = json_decode($result, true); 

if ($info['http_code'] == 200) { 
    // okay 
    $access_token = $response['access_token']; 
    var_dump($response); 
} else { 
    // error 
    echo $response['error'] . ': ' . $response['error_description']; 
} 
関連する問題