基本访问认证标头

时间:2014-04-23 12:06:26

标签: php rest authentication zend-framework

我目前正在使用Zend Framework在PHP中使用REST客户端并遇到问题。

我目前有两个我正在测试的虚拟服务;一个是'noauth',它不需要身份验证,只返回一些JSON,另一个是'auth',它需要身份验证并返回更具体的JSON。直接从Web访问两者都可以正常工作,例如导航到“https://example.org/example/dummy/noauth”会在网页上显示JSON,“https://example.org/example/dummy/auth”会显示一个对话框,要求用户登录。

我的目标是能够从我的主Web应用程序访问这些不同的服务。首先需要用户登录此Web应用程序。然后,他们将能够从该Web应用程序调用不同的服务。我能够使用这个很容易地让noauth工作:

$base_url = 'https://example.org';
$client = new Zend_Rest_Client($base_url);
$endpoint = '/example/dummy/noauth';
$response = $client->restGet($endpoint);

但是我无法让'auth'工作,而不是每次都要求用户的用户名和密码。目前,我正在使用硬编码值,但最终,它将是用户登录时存储在会话中的值。以下是我尝试过的一些事情:

$user = base64_encode('username:password');
$client->setHeaders('Authorization: Basic '.$user);

还有:

$client = new Zend_Http_Client();
$client->setAuth('username', 'password', Zend_Http_Client::AUTH_BASIC);

这些似乎都没有奏效。有没有人对如何实现我的需求有任何想法?

1 个答案:

答案 0 :(得分:1)

您必须在REST对象上调用getHttpClient(),然后在Zend_Http_Client()之后调用通常需要的函数。

这是一个简单的例子:

$client = new Zend_Rest_Client($base_url);
$client->getHttpClient()->setAuth($username, $password, Zend_Http_Client::AUTH_BASIC);
...

通过这样做,它将在变量中使用用户名和密码,而不是每次要求用户访问页面时都会询问用户。