![](/img/trans.png)
[英]PHP : Google plus Oauth 2.0 - Getting Error fetching OAuth2 access token, message: 'invalid_client'
[英]curl in PHP to get access_token OAuth2 return error: “invalid_client”
從OAuth2服務器獲取access_token時出現問題。 我在PHP中使用curl來獲取access_token,但失敗並返回:
error: "invalid_client",
error_description: "Client authentication failed."
奇怪的是,如果我在命令提示符下使用curl:
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
成功並返回access_token:
"access_token":"fI7APDRZygrsF1BiegAQCS1yUT8vnm1LgD5bIu2U",
"token_type":"Bearer",
"expires_in":3600
我正在使用Laravel 5.2,這是我的代碼,可以從OAuth Server處理以獲取access_token:
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;
}
我曾嘗試從Internet和stackoverflow中獲取另一個腳本,然后重新啟動Apache和PHP,但仍然無法正常工作。
有什么辦法解決這個問題? 我應該檢查什么?
感謝您的幫助和答復。
嘗試改為在curl標頭上發送請求。
$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
作為帖子發送,要么在標頭上發送它們,嘗試一下。 順便說一句。 在傳遞給curl請求之前,應檢查$request->code
。 並且所有url, client_secret, client_id
必須在.env
,並通過config/services
獲得它們。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.