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,或者取消了密码提示 }
|