欢迎来到天天文库
浏览记录
ID:13048932
大小:44.00 KB
页数:6页
时间:2018-07-20
《http认证及其在web平台中的实现》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、HTTP认证及其在Web平台中的实现一、前言 HTTP认证是Web服务器对客户端的权限进行认证的一种方式,能够为Web应用提供一定程度的安全保障。目前一些Web应用项目已经提出了采用HTTP认证的需求。虽然一般的Web容器都提供基本认证和摘要认证的API,但不同的Web容器提供的API也互不相同,因此我们在ZXWeb平台的工具包中提供了一组API,利用这组API,开发人员可以在应用程序中使用统一的接口轻松实现HTTP认证功能,而不必依赖于Web容器。二、HTTP认证机制 HTTP认证采用“质询-响应(challenge-r
2、esponse)”的机制。“质询”是服务器端对客户端的质询,即要求客户端发送认证信息;“响应”是客户端对“质询”的响应,即发送带有认证信息的HTTP请求。 一般来说,客户端第一次请求一个URI时,并不知道是否需要认证,因此总是不带认证信息的,这时服务器端就会找不到认证信息,认证失败,于是向客户端发出一个“质询”。 所谓“发出质询”,就是给客户端发送一个HTTP响应,其状态码为401(Unauthorized),并且包含消息头WWW-Authenticate,客户端看到这个响应就知道这个URI需要认证。WWW-Authent
3、icate消息头格式为 WWW-Authenticate:challenge 其中是就是质询信息,RFC2617中的定义为:challenge =auth-scheme1*SP1#auth-paramauth-scheme=tokenauth-param =token"="(token
4、quoted-string) 在challenge的定义中,首先是auth-scheme,即认证方案,它被定义为一个token,即预定义的符号。所谓token,就是一些字符串,但这些字符串不是随意的,而是
5、大家约定的,它们具有特定的含义。auth-scheme的取值只能是Basic或Digest,分别表示基本认证和摘要认证,这两个单词就是token。这里没有把auth-scheme定义为Basic
6、Digest,而是一个token,说明还可以进行扩展,还可以取其他符号——只要服务器端和客户端互相约定都能理解就行。 接着,“1*SP”表示1个或多个空格符。其中“1*”表示数量为1个到多个,“SP”即空格符(ASCII码32)。 然后是“1#auth-param”,表示一个auth-param的列表。其中的“1#”也表示后面的元
7、素是1到多个,但与“1*”不同的是,“1#”表示一个“列表”,即元素之间是用逗号“,”分隔开的。列表中的每个auth-param被定义为一个名值对,即 符号=符号 或 符号=“引号中的字符串” 这两种形式。 基本认证和摘要认证中都定义了一个相同的auth-param,即realm,定义为: realm =“realm”“=”realm-value realm-value=quoted-stringrealm-value是一个两端加引号的大小写相关的字符串,表示要求认
8、证的“领域(realm)”。领域是由服务器自己决定的,不同的服务器可以设置自己的领域,同一个服务器也可以有多个领域。质询中包含领域信息是为了让客户端知道哪个范围的用户名是合法的,RFC2617中建议领域至少包含主机名和有权限的用户组,例如“registered_users@www.news.com”。 客户端收到质询后,应该给服务器端返回一个“响应”,即重新发送一个新的HTTP请求。这个新的HTTP请求与前一个HTTP请求的差别在于多了一个Authorization消息头,该消息头的格式为Authorization:credentia
9、ls,其中的credentials就是认证信息,认证信息的格式根据不同的认证方案而有所不同。 服务器端对认证信息进行判断,只有认证通过,才会响应客户端的请求。 1.基本认证 基本认证的质询中只定义了一种auth-param,即realm,因此基本认证的质询也定义为challenge=“Basic”realm质询举例: 当服务器端认证不通过,将返回一个状态码为401(Unautherized)的响应消息,并带有如下消息头: WWW-Authenticate:Basicrealm=“MySecre
10、tWorld” 基本认证的认证信息credentials定义为: credentials =“Basic”ba
此文档下载收益归作者所有