PHP-клиентская дайджест-аутентификация с помощью qop = auth-int - PullRequest
0 голосов
/ 14 июня 2011

Кто-нибудь знает какую-либо библиотеку PHP для подключения удаленных серверов, которые используют метод дайджест-аутентификации с qop = auth-int?Или, если нет, теперь я должен построить A2 для результата?В RFC 2617 говорится, что мне нужно использовать тело объекта, но что это?Я просто отправляю запрос GET, у него вообще нет тела.Заранее спасибо.

Ответы [ 3 ]

1 голос
/ 23 января 2013

Я тоже искал ответ на ваш вопрос, кроме запросов GET. Возможно, вы могли бы использовать что-то вроде:

$entityBody = file_get_contents('php://input');

Я не проверял, работает ли он, но, глядя на ответ на этот вопрос , мне показалось бы, что он должен.

Обратите внимание, что этот поток может быть прочитан только один раз [1] , поэтому, если он вам понадобится снова в другом месте, вам следует повторно использовать переменную $ entityBody.

1 голос
/ 09 ноября 2013

Из моего ответа на аналогичный вопрос:

Недавно я реализовал дайджест-аутентификацию на стороне клиента в PHP с помощью cURL.Вот полный код:

<?php

error_reporting(E_ALL); 
ini_set( 'display_errors','1');

$url = "https://api.example.com/ws.asmx/do";
$username = "username";
$password = "pwd";
$post_data = array(
        'fieldname1' => 'value1',
        'fieldname2' => 'value2'
  );

$options = array(
        CURLOPT_URL            => $url,
        CURLOPT_HEADER         => true,    
        CURLOPT_VERBOSE        => true,
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_FOLLOWLOCATION => true,
        CURLOPT_SSL_VERIFYPEER => false,    // for https
        CURLOPT_USERPWD        => $username . ":" . $password,
        CURLOPT_HTTPAUTH       => CURLAUTH_DIGEST,
        CURLOPT_POST           => true,
        CURLOPT_POSTFIELDS     => http_build_query($post_data) 
);

$ch = curl_init();

curl_setopt_array( $ch, $options );

try {
  $raw_response  = curl_exec( $ch );

  // validate CURL status
  if(curl_errno($ch))
      throw new Exception(curl_error($ch), 500);

  // validate HTTP status code (user/password credential issues)
  $status_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
  if ($status_code != 200)
      throw new Exception("Response with Status Code [" . $status_code . "].", 500);

} catch(Exception $ex) {
    if ($ch != null) curl_close($ch);
    throw new Exception($ex);
}

if ($ch != null) curl_close($ch);

echo "raw response: " . $raw_response; 

?>
0 голосов
/ 14 июня 2011

Если вы выполняете запрос GET, вам не нужен auth-int. Если ваша служба требует этого, вы можете принять пустое тело объекта (таким образом, вы можете просто выполнить md5 ("") для этой части хэша A2).

...