0

我正在尝试制作一个使用摘要作为身份验证的 API,当我使用此命令通过 curl 命令行访问 API 时,它可以工作

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

但是当使用此代码使用Guzzle 6 php 库运行 api 客户端时

$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 Unauthorized` 响应:{"status":false,"error":"Unauthorized"}

如何解决这个问题?以及如何以正确的方式实现自定义处理程序 guzzle php?

4

2 回答 2

0

我有同样的问题,发现它可能取决于你的 curl php 扩展的版本。我没有升级它的可能性,所以我不得不自己处理摘要身份验证(基本上维基百科中的信息就足够了https://en.wikipedia.org/wiki/Digest_access_authentication)。

您发送第一个请求并获得带有代码 401 和“WWW-Authenticate”标头的响应(它包含一些您需要生成散列的值),然后只需生成“Authorization”标头并在您的 guzzle 请求中使用它。

抱歉,我目前无法提供代码示例,如果您自己不制作,可能稍后再提供:)

于 2016-05-16T20:48:39.253 回答
0

我有同样的问题,我注意到根本没有安装 php-curl 扩展。安装后,摘要身份验证工作。要安装扩展类型:

sudo apt-get install php-curl

于 2018-07-31T22:06:03.310 回答