2017-10-30 21 views
0

次のコードを使用してOpenIdシステムにアクセスし、ベアラトークンを要求しています。OpenIDに接続するcURLを使用するとエラーが発生します

{"Message":"The requested resource does not support http method 'GET'."} 

誰かが私のコードへの正しいを確認してください助けることができます:

if (isset($_GET['code'])) { 
    // try to get an access token 
    $code = $_GET['code']; 
    $url = 'https://3rdpartydomain.com/connect/token'; 
    $params = array(
     "code" => $code, 
     "client_id" => CLIENTID, 
     "client_secret" => CLIENTSECRET, 
     "redirect_uri" => 'http://' . $_SERVER["HTTP_HOST"] . $_SERVER["PHP_SELF"], 
     "grant_type" => "authorization_code" 
    ); 

    $ch = curl_init(); 
    curl_setopt($ch, constant("CURLOPT_" . 'URL'), $url); 
    curl_setopt($ch, constant("CURLOPT_" . 'POST'), true); 
    curl_setopt($ch, constant("CURLOPT_" . 'POSTFIELDS'), $params); 
    $output = curl_exec($ch); 
    $info = curl_getinfo($ch); 
    curl_close($ch); 
    if ($info['http_code'] === 200) { 
     header('Content-Type: ' . $info['content_type']); 
     return $output; 
    } else { 
     return 'An error happened'; 
    } 
} else { 

    $url = "https://3rdpartydomain.com/connect/token"; 

    $params = array(
     "response_type" => "code", 
     "client_id" => CLIENTID, 
     "redirect_uri" => 'http://' . $_SERVER["HTTP_HOST"] . $_SERVER["PHP_SELF"], 
     "scope" => "openid" 
    ); 

    $request_to = $url . '?' . http_build_query($params); 

    header("Location: " . $request_to); 
} 

しかし、私は次のメッセージを取得していますか?

ありがとうございます!

答えて

0

これらを追加します。

ますcurl_setopt($ falseにカール、CURLOPT_SSL_VERIFYPEERを、);

curl_setopt($ curl、CURLOPT_SSL_VERIFYHOST、false);

+0

これらが追加されても同じエラーメッセージが表示されます。 –

+0

ああ!私はあなたの定数が間違っているようだと思う! – long

+0

これらの置換を使用してください curl_setopt($ curl、CURLOPT_URL、$ url); curl_setopt($ curl、CURLOPT_POST、true); curl_setopt($ curl、CURLOPT_POSTFIELDS、$ params); – long

0

あなたのIdPからのリダイレクトには、おそらく要求された方法の変更があります。私はcurl -XPOSTでOIDCをテストしていたときにこの問題を見てきました。回避策は、その要求タイプの指定を削除することでした。あなたの行をコメントしようとしてください:curl_setopt($ch, constant("CURLOPT_" . 'POST'), true);

関連する問題