Zend Framework 2参考Zend\Authentication(HTTP认证适配器)
Zend Framework 2参考Zend\Authentication(HTTP认证适配器)
介绍
Zend\Authentication\Adapter\Http提供了RFC-2617, Basic和Digest的主要标准的实现。摘要式身份验证HTTP身份验证的方法,提高了基本身份验证时提供的方式进行身份验证,而无需在网络上以明文传送口令。
主要特点:
- 支持基本和摘要式身份验证。
- 响应所有客户端支持的方案的问题的解决
- 支持代理认证。
- 包括支持文本文件认证和验证其他来源,如数据库提供了一个接口。
还有一些显著的 RFC-2617 特性没有实现:
- 没有跟踪,可能需要对”stale”(过去)状态的跟踪,和对重复访问攻击的保护
- 完整性检查认证或”auth-int”
- HTTP头的认证信息
设计概述
这个适配器包括两个子组件,HTTP认证类本身和解析的”Resolvers”,HTTP验证类封装的进行基本和摘要式身份验证的逻辑。它使用Resolver在一些数据存储(缺省是文本文件)来查找客户的身份,从数据存储和检索凭据。 “resolved”的证书,然后比较客户端提交的决定认证是否成功的值。
配置选项
Zend\Authentication\Adapter\Http通过数组配置进行构造,一些选项是可选,另外一些是必须的:
配置选项
| 选项名 | 是否必须 | 描述 |
|---|---|---|
| accept_schemes | Yes | 确定适配器将接受来自客户端的认证方案,必须包含‘basic’和(或) ‘digest’的一个用空格分割的列表. |
| realm | Yes | 设置认证区域;在给定的区域里用户名必须是唯一的。 |
| digest_domains | Yes, when accept_schemes contains digest | 空间分隔的有效相同的认证信息的URIs列表。 URIs不需要都指向同一台服务器上。 |
| nonce_timeout | Yes, when accept_schemes contains digest | 设置认证失效时间(单位:秒),参考下面注释 |
| use_opaque | No | 指定是否发送头信息中的不透明的值。默认为true。 |
| algorithm | No | 指定的算法。默认为MD5,唯一支持的选项(现在)。 |
| proxy_auth | No | 默认情况下禁用。启用执行代理认证,而不是正常的源服务器认证。 |
注意:目前使用的
nonce_timeout有一些有趣的副作用。此设置用来确定给定的nonce的有效期,或有效地接受客户端的身份验证信息多久。目前,如果它被设置为3600(举例来说),这将导致每隔一小时适配器提示客户端提供新的凭据。在未来的版本中,将通过跟踪和过时支持来解决。
解析
解析器的工作是接受用户名和区域,并返回某种证书值。基本认证期望接收用户的密码的Base64编码版本。高级认证期望接收用户的用户名,区域和密码(用冒号分隔)的哈希。目前,唯一支持的哈希算法是MD5。Zend\Authentication\Adapter\Http依赖实现了Zend\Authentication\Adapter\Http\ResolverInterface的类。一个文本文件解析器类包含这样的适配器,但任何其他类型的解析器,可以简单地通过创建实现解析器接口。
文件解析器
文件解析器是一个非常简单的类。它有一个单个的属性指定一个文件名传递给构造方法。它的resolve()方法遍历文本文件,寻找符合匹配的用户名和区域的行。文本文件格式,类似于Apache的htpasswd文件:
|
1
|
<username>:<realm>:<credentials>\n |
每行包含三个字段 – 用户名,领域和证书 – 由冒号分隔。凭据字段是不透明的文件解析器,它只是返回值给调用者。因此,同样的文件格式基本和摘要式身份验证。在基本身份验证,证书字段应该以明文形式写入。摘要式身份验证,它应该是上述的MD5。
有两个同样简单的方法来创建一个文件解析器:
|
1
2
3
|
use Zend\Authentication\Adapter\Http\FileResolver;$path = 'files/passwd.txt';$resolver = new FileResolver($path); |
或
|
1
2
3
|
$path = 'files/passwd.txt';$resolver = new FileResolver();$resolver->setFile($path); |
如果给定的路径是空的或不可读,将抛出一个异常
基本用法
首先,建立一个所需配置值的数组:
|
1
2
3
4
5
6
|
$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\Authentication\Adapter\Http对象:
|
1
|
$adapter = new Zend\Authentication\Adapter\Http($config); |
由于我们支持基本和摘要式身份验证,我们需要两个不同的解析器对象。请注意,这可能只是两个简单的不同的类:
|
1
2
3
4
5
6
7
8
9
10
|
use Zend\Authentication\Adapter\Http\FileResolver;$basicResolver = new FileResolver();$basicResolver->setFile('files/basicPasswd.txt');$digestResolver = new FileResolver();$digestResolver->setFile('files/digestPasswd.txt');$adapter->setBasicResolver($basicResolver);$adapter->setDigestResolver($digestResolver); |
最后,我们执行身份验证。为了完成工作,适配器需要对请求和响应进行引用:
|
1
2
3
4
5
6
7
8
9
10
|
assert($request instanceof Zend\Http\Request);assert($response instanceof Zend\Http\Response);$adapter->setRequest($request);$adapter->setResponse($response);$result = $adapter->authenticate();if (!$result->isValid()) { // Bad username/password, or canceled password prompt} |
Zend Framework 2参考Zend\Authentication(HTTP认证适配器)的更多相关文章
- Zend Framework 2参考Zend\Authentication(数据库表认证)
+ 转载自:Zend Framework 2参考Zend\Authentication(数据库表认证) 介绍 Zend\Authentication\Adapter\DbTable提供对存储在数据库表 ...
- Zend Framework 2参考Zend\Authentication(摘要式身份验证)
Zend Framework 2参考Zend\Authentication(摘要式身份验证) 介绍 摘要式身份验证是HTTP身份验证的方法,提高了基本身份验证时提供的方式进行身份验证,而无需在网络上以 ...
- Zend Framework 2参考Zend\Authentication(Zend\Authentication介绍)
原文:Zend Framework 2参考Zend\Authentication(Zend\Authentication介绍) Zend\Authentication组件提供了认证接口和具体的通用的认 ...
- 关于Zend Framework 2中 Zend\Session的使用
一直迷惑于zend\Session的使用,这个是Zend\Session的官方教程的中文版,http://zend-framework-2.yangfan.co/blog/556. 其中最重要的是关于 ...
- Zend Framework 1 - Quick Start
创建 Zend 项目 要创建 Zend 项目,首先要下载并解压 Zend Framework. 安装 Zend Framework 下载最新的 Zend Framework 1.12.20 源码包,( ...
- Zend Framework XML外部实体和安全绕过漏洞
漏洞版本: Zend Framework 1.x 漏洞描述: Bugtraq ID:66358 Zend Framework是一款开放源代码的PHP5开发框架实现. Zend Framework存在多 ...
- Zend Framework学习日记(2)--HelloWorld篇(转)
Zend Framework学习日记(2)--HelloWorld篇 这一篇主要演示如何用zf命令行工具建立一个基于Zend Framework框架的工程,也是我初学Zend Framework的小练 ...
- Zend Framework 留言本实战(转)
一.环境搭建和ZF安装 *[注]本节内容大部分来至Zend Framework官方手册 1.1 Zend Framework下载 Zend Framework 使 ...
- 主流PHP框架间的比较(Zend Framework,CakePHP,CodeIgniter,Symfony,ThinkPHP,FleaPHP)
Zend Framework 优点: Zend Framework大量应用了PHP5中面向对象的新特征:接口.异常.抽象类.SPL等等.这些东西的应用让Zend Framework具有高度的模块化和灵 ...
随机推荐
- php分页笔记
在做留言板的时候,用到了分页,所以写了这个分页笔记 既然已经开始写分页了,肯定掌握了了php的一些知识以及mysql的基本操作 在做分页的时候,我也遇到了很多问题,但是大家不要怕,无论什么问题 ...
- Django生产环境的部署-Apache-mod_wsgi
httpd.conf配置 ServerSignature On ServerTokens Full Define APACHE24 Apache2.4 Define SERVER_BASE_DIR & ...
- maya2105 - windows8 - numpy/scipy
To compile numpy, create a site.cfg file in numpy's source directory with the following or similar c ...
- 解决在HTTPS页面里嵌套HTTP页面浏览器block的问题
问题描述: 浏览器默认是不允许在HTTPS里面引用HTTP页面的,ie下面会弹出提示框提示是否显示不安全的内容,一般都会弹出提示框,用户确认后才会继续加载,但是chrome下面直接被block掉,只在 ...
- avalon中require的实现
var plugins = { loader: function(builtin) { window.define = builtin ? innerRequire.define : otherDef ...
- Uva10766 Organising the Organisation
题目链接戳这里 基尔霍夫矩阵裸题.构建基尔霍夫矩阵(度数矩阵-邻接矩阵),求他的任意\(n-1\)阶主子式的绝对值即为答案. 这题开始用java写,结果BigInteger太慢Tle了. 后来用c++ ...
- hdu 4714
一个树形dp的题,又是一个涉及不深的领域 = =: 不过在网上看到了大神用很巧的思路解决了这个题: 大神的思路就是: 从树的底部往上看:如果一棵子树拥有两个及以上的叶子节点,可以将这棵子树与大树分离 ...
- Stanford Parser学习入门(3)-标记
以下是Stanford parser中的标记中文释义供参考. probabilistic context-free grammar(PCFG) ROOT:要处理文本的语句 IP:简单从句 NP ...
- CAS单点登录配置[3]:服务器端配置
在准备工作,证书生成等工作完成后,本篇介绍服务器端的配置. JDK配置 1 我们将生成的cacerts文件分别拷贝到JDK目录下的jre/lib/security目录下及JRE对应的目录中,如果之前存 ...
- C++构造函数的自动调用(调用一个父类的构造函数,有显性调用最好,否则就默认调用无参数的构造函数)——哲学思想:不调用怎么初始化父类的成员数据和VMT?
我总是记不住构造函数的特点,关键还是没有领会那个哲学思想:父类的构造函数一方面要初始化它自己的成员数据,另一方面也要建立它自己的VMT呀!心里默念一百遍:一定调用父类构造函数,一定调用父类构造函数,一 ...