Авторизация Guzzle Digest не работает

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

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

но при запуске клиента API с использованием библиотеки php Guzzle 6 с использованием этого кода

$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 Неавторизованный ответ: {"status":false,"error":"Unauthorized"}

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


person Lyan Dwi Pangestu    schedule 10.05.2016    source источник


Ответы (2)


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

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

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

person Artur Semyonov    schedule 16.05.2016

У меня была такая же проблема, и я заметил, что расширение php-curl вообще не установлено. После установки дайджест авторизации заработал. Чтобы установить тип расширения:

sudo apt-get install php-curl

person Tom    schedule 31.07.2018