Аутентификация HTTP CURL на стороне сервера

Я создаю веб-сервис с Zend, и я должен аутентифицировать пользователей перед отправкой ответа. Пользователь отправит запрос на страницу сервера, используя curl, передав свои учетные данные в виде curl_setopt($curl, CURLOPT_USERPWD, 'key:pass') ;

Iam с использованием рамки Zend, поэтому серверная страница обозначается так:

http://www.example.com/app_name/public/controller/action/parameter

Вот полный код для запроса пользователя (client.php):

 <?php $curl = curl_init('http://www.example.com/app/public/user/add/1'); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); curl_setopt($curl, CURLOPT_USERPWD, 'username:password'); curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_ANY); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true); curl_setopt($curl, CURLOPT_USERAGENT, 'Sample Code'); $response = curl_exec($curl); $resultStatus = curl_getinfo($curl); if($resultStatus['http_code'] == 200) { echo $response; } else { echo 'Call Failed '.print_r($resultStatus); } ?> 

Теперь я хочу, чтобы я мог получить имя пользователя и пароль на стороне сервера (в моем контроллере zend), чтобы я мог проверить учетные данные пользователя из базы данных и отправить ответ соответствующим образом. Итак, как я могу выполнять аутентификацию на другой странице?

Zend Framework имеет готовый компонент для обработки HTTP-аутентификации.

Осмотрите примеры на

Если вы не хотите использовать это, вы все равно можете пойти по пути «старой школы», как описано в

и вручную проверьте $_SERVER['PHP_AUTH_USER'] и $_SERVER['PHP_AUTH_PW']

Вы должны установить CURLOPT_HTTPAUTH в CURLAUTH_BASIC .

Таким образом, в целевом скрипте будут доступны PHP_AUTH_USER и PHP_AUTH_PW (обычный текст).

Сценарий вызова:

 <?php $ch = curl_init('https://localhost/target.php'); // ... curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC); curl_exec($ch); ?> 

В target.php:

 $user = $_SERVER['PHP_AUTH_USER']; $pass = $_SERVER['PHP_AUTH_PASS']; 

Я предлагаю выполнить запрос cURL по HTTPS, поскольку имя пользователя и пароль передаются простым текстом.

вы можете отправить имя пользователя и пароль в виде полей для отправки

 $post_data = $user.":".$pass curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data); 

вы можете получить учетные данные, используя $ _POST