curl PHP获取access_token OAuth2返回错误:“invalid_client”
从OAuth2服务器获取access_token时出现问题。我使用卷曲的PHP拿到的access_token,但是失败了,返回:curl PHP获取access_token OAuth2返回错误:“invalid_client”
error: "invalid_client",
error_description: "Client authentication failed."
奇怪的是,如果我使用命令提示符卷曲:
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的服务器来处理得到的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;
}
我试图从互联网和*另一个脚本,并重新启动Apache和PHP,但它仍然无法正常工作。
有什么办法可以解决这个问题吗?我应该检查什么?
谢谢你的帮助和解答。
尝试在卷曲标头上发送请求。
$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
得到它们。
我尝试过,但它返回RouteCollection.php行218'错误:MethodNotAllowedHttpException。在传递curl之前,你应该检查'$ request-> code'是什么意思?什么样的检查?然后,我尝试在'.env'中设置'url,client_secret,client_id',但仍然是一样的。 'config/services'在OAuth服务器中,而不在客户端服务器中。因为我的客户端服务器上的代码错误不在OAuth服务器中。 –
如果我必须在'.env'中设置'url,client_secret,client_id'并通过'config/services'获取它们,那么服务的名称是什么?命名该服务是否由我来决定?我如何从服务中访问它们?对于我的愚蠢问题感到抱歉,因为我是OAuth2中的新成员。并感谢您的回答。 –
您是否尝试在卷曲标题上添加grant_type? –
不,我没有尝试过。怎么做? –