繁体   English   中英

Nginx 401 与 PHP cURL

[英]Nginx 401 with PHP cURL

为了获得 oAuth2 令牌,我必须通过发送base64_encode(api_client_id:api_secret)连接到 REST API URL: https://abcd/api/oauth/v1/token 此外,请注意,对https://abcd/api/oauth/v1/token的访问受 htpwd 保护。

所以我写在 PHP 的请求是:

$base64_encoded_client_id_and_secret = base64_encode('api_client_id:api_secret');
$curl_session = curl_init();
curl_setopt($curl_session, CURLOPT_URL, 'https://abcd/api/oauth/v1/token');
curl_setopt($curl_session, CURLOPT_HTTPHEADER, ['Content-Type: application/json', 'Authorization: Basic ' . $base64_encoded_client_id_and_secret]);
curl_setopt($curl_session, CURLOPT_HTTPAUTH, CURLAUTH_DIGEST);
curl_setopt($curl_session, CURLOPT_USERPWD, "htpwd_user:htpwd_pwd");
curl_setopt($curl_session, CURLOPT_POST, true);
curl_setopt($curl_session, CURLOPT_POSTFIELDS, [
    'grant_type' => 'password',
    'username'  =>  'api_user',
    'password'  =>  'api_pwd'
    ]);
$ret = json_decode(curl_exec($curl_session));

但是 Nginx 服务器返回错误 401。我该怎么做才能修复此错误?

我测试了不同的值而不是CURLAUTH_DIGEST 没有工作。

是 CROOS Origin 的问题吗?

以下解决方案即使有效(请阅读以下内容)也不是一个好的解决方案。 通过在任意时间段内删除 htpasswd 安全步骤(等于我的测试和开发时间的总和)解决了这个问题。 如果你这样做要小心,因为谷歌可能会从属于这个时间间隔的时刻开始索引网站。

我没有尝试按照@AngelDeykov 在评论中(不是在答案中)提出的那样用逗号分隔字段值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM