HTTP 认证适配器简介
主要特性:
还有一些显著的 RFC-2617 特性没有实现:
设计回顾这个适配器包括两个子组件,HTTP authentication类本身和所谓的 "Resolvers"。HTTP authentication类封装了实现基本和摘要认证的逻辑。它使用Resolver在数据存储(缺省是文本文件)中查找客户的身份并取出证书。"resolved" 的证书和客户的输入相比较来决定认证是否成功。 配置选项
ResolversResolver的作用是接受用户名和领域,并返回证书值。基本认证期望接收用户密码的Base64编码版本。摘要认证期望接收用户的用户名,领域和密码(用冒号分隔)的hash。当前,唯一支持的hash算法是MD5。
文件 Resolver
文件resolver是一个非常简单的类。它有一个单个的属性指定一个文件名,它也可以被传递给构造器。它的 <username>:<realm>:<credentials>\n 有两个同等简单的方法创建文件 Resolver:
$path = 'files/passwd.txt';
$resolver = new Zend_Auth_Adapter_Http_Resolver_File($path);
$path = 'files/passwd.txt';
$resolver = new Zend_Auth_Adapter_Http_Resolver_File();
$resolver->setFile($path);
基本用法首先,建立一个带有必需的配置值得数组:
$config = array(
'accept_schemes' => 'basic digest',
'realm' => 'My Web Site',
'digest_domains' => '/members_only /my_account',
'nonce_timeout' => 3600,
);
/members_only 和/my_account之下的区域认证访问。领域值通常在浏览器中密码对话框中显示。nonce_timeout,当然,会有上述的行为。
下一步, 创建 Zend_Auth_Adapter_Http 对象:
$adapter = new Zend_Auth_Adapter_Http($config);
因为我们对基本和摘要认证都支持,所以我们需要两个不同的resolver对象。注意这仅仅简单地是两个不同的类:
$basicResolver = new Zend_Auth_Adapter_Http_Resolver_File();
$basicResolver->setFile('files/basicPasswd.txt');
$digestResolver = new Zend_Auth_Adapter_Http_Resolver_File();
$digestResolver->setFile('files/digestPasswd.txt');
$adapter->setBasicResolver($basicResolver);
$adapter->setDigestResolver($digestResolver);
最后,我们执行认证。为了完成认证,适配器对请求(Request)和响应(Response)都需要一个reference:
assert($request instanceof Zend_Controller_Request_Http);
assert($response instanceof Zend_Controller_Response_Http);
$adapter->setRequest($request);
$adapter->setResponse($response);
$result = $adapter->authenticate();
if (!$result->isValid()) {
// 错误的 userame/password,或者取消了密码提示
}
|