簡體   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