2016-05-10 3 views
0

Я пытаюсь сделать API, которые используют дайджест, как аутентификация, когда я получить доступ к API с помощью локонов командной строки с помощью этой команды, это работажрать переваривать Auth не работает

curl --digest --user website:website http://localhost/api/test/users 

но при запуске клиента апи с помощью жрать 6 библиотеки PHP с помощью этого кода

$handler = new GuzzleHttp\Handler\CurlHandler(); 
    $stack = GuzzleHttp\HandlerStack::create($handler); // Wrap w/ middleware 

    $client = new GuzzleHttp\Client(['base_uri' => 'http://localhost', 'handler' => $stack]); 
    try { 
     $request = new GuzzleHttp\Psr7\Request('GET', $req_uri, [ 
      'auth' => ['website', 'website', 'digest'] 
     ]); 
     $response = $client->send($request, ['timeout' => 2]); 
    } catch (Exception $e) { 
     echo $e->getMessage(); 
     die(); 
    } 

    return $response; 

это не работает, он говорит

401 Несанкционированный ответ: {«статус»: ложь, «ошибка»: «Несанкционированный»}

как исправить это? и как реализовать пользовательский обработчик guzzle php в правильном направлении?

ответ

0

У меня была такая же проблема, выяснилось, что это может зависеть от версии расширения curl php. У меня не было возможности обновить его, поэтому мне пришлось обрабатывать дайджест самостоятельно (в основном информация в википедии достаточно https://en.wikipedia.org/wiki/Digest_access_authentication).

Вы отправляете первый запрос и получаете ответ с кодом 401 и заголовком «WWW-Authenticate» (он содержит некоторые значения, необходимые для генерации ваших хэшей), а затем просто создайте заголовок «Авторизация» и используйте его в своем жужжать запросы.

Извините, я не могу представить пример кода на данный момент, возможно, позже, если вы не сделаете это самостоятельно :)

Смежные вопросы