curl 为什么XAMPP服务器和Linux服务器上的客户端身份验证失败?

hujrc8aj  于 2022-11-13  发布在  Linux
关注(0)|答案(2)|浏览(173)

我正在尝试使用CURL发出POST请求。使用Postman和在我的本地计算机上使用IIS时没有错误,但在XAMPP服务器和具有CA证书的Linux服务器上,我得到:

{"error":"OAUth Error","status":401,"message":"Client authentication failed"}

代码如下所示:

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
 CURLOPT_URL => 'https://api.timewave.se/v3/oauth/token',
 CURLOPT_RETURNTRANSFER => true,
 CURLOPT_ENCODING => '',
 CURLOPT_MAXREDIRS => 10,
 CURLOPT_TIMEOUT => 0,
 CURLOPT_FOLLOWLOCATION => true,
 CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
 CURLOPT_CUSTOMREQUEST => 'POST',
 CURLOPT_POSTFIELDS => array('client_id' => '1','client_secret' => 'abc........abc','grant_type' => 'client_credentials'),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

为什么在XAMPP服务器和Linux服务器上出现“客户端身份验证失败”?

cngwdvgl

cngwdvgl1#

好消息是curl发出了请求,服务器做出了响应。
最可能的原因是HTTPS CA证书有问题。
你的 curl 后数据看起来不错。
他们的例子 curl :

curl --location --request POST 'https://api.timewave.nu/v3/oauth/token' \
--form 'client_id="5"' \
--form 'client_secret="0zbrotKJAGaLGKhuGC0LJLVdkR7Z4lKuqWIxoMqI"' \
--form 'grant_type="client_credentials"'

--location选项包含在以下代码中:

CURLOPT_FOLLOWLOCATION => true,

并且对post数据使用数组,保证内容类型为“form”数据。
唯一的事情(除了SSL),我可以看到,可能会得到这个响应是一个错字在后数据。
但是还有一些其他的事情需要解决。
POST不是CURLOPT_CUSTOMREQUEST的有效参数
虽然它可能仍然工作。
PHP手册列出了有效的参数,POST不在其中。
您应该用途:CURLOPT_POST=>true,
这就带来了另一个问题。因为auth凭证必须保持安全,所以很可能不能使用CURLOPT_SSL_VERIFYPEER=>false,
您可能需要curl_set_opt URLOPT_CAINFO选项,或者可以使用CURLOPT_CAPATH指定证书目录
您应该查看请求标题。
你可能会发现一些不对劲的地方。
CURLINFO_HEADER_OUT=>true相加
然后在curl_exec($curl);之后

echo '<pre>' . curl_getinfo($curl,CURLINFO_HEADER_OUT);

或者查看请求和响应的所有详细信息,包括请求头。

$info = var_export(curl_getinfo($curl),true);
echo "<pre>$info";

响应标头应如下所示:

Server: nginx/1.14.0 (Ubuntu)
Date: Tue, 10 Dec 2019 06:37:03 GMT
Content-Type: application/json; charset=UTF-8
Transfer-Encoding: chunked
Connection: keep-alive
pragma: no-cache
Cache-Control: no-store, private
ct3nt3jp

ct3nt3jp2#

感谢所有的回应,我在error.log中发现了这个问题

[Mon Jun 20 11:32:38.031690 2022] [ssl:warn] [pid 12036:tid 388] AH01909: www.example.com:443:0 server certificate does NOT include an ID which matches the server name

已编辑本地服务器上的文件..\apache\conf\extra\httpd-ssl.conf
https://kinsta.com/knowledgebase/xampp-server-certificate-does-not-include-an-id-which-matches-the-server-name/

ServerName www.example.com:443

ServerName localhost

由于某种原因,它在没有任何修改的情况下工作在Linux服务器上

相关问题