构建RESTful Web Service - 验证的实现和使用(HTTP 基本认证)

因为RESTful的无状态特性,导致无法知道当前的请求方是否可靠,所以不得不对每次请求进行验证。但是如何更语义化的将需要验证的信息附加到HTTP里呢?现在比较常见的方式是把验证信息作为参数发送过去,但是这样会违反RESTful的原则。例如,GET/user/1/xx验证信息xx。幸好的是HTTP协议本身定义了两种认证方式,Basic和Digest。

一、HTTP基本认证(BasicAthorization)

I.简介

HTTP基本认证比较简单,明文发送,没有签名,安全性低,没作用域,只能适用于一般场合。

整个交互过程如下:

用户访问需要认证的页面

服务端验证失败,响应401状态码,并响应WWW-Authenticate报头

客户端收到WWW-Authenticate报头,表示要提供认证信息

客户端将用户名和密码使用:号连接,并base64编码后方在报头里发送回服务端

例子:

1.客户端发起请求,无发送认证信息:

Java代码收藏代码

GET/private/index.htmlHTTP/1.0

Host:localhost

2.服务端响应

Java代码收藏代码

HTTP/1.0401AuthorizationRequired

Server:HTTPd/1.0

Date:Sat,27Nov200410:18:15GMT

WWW-Authenticate:Basicrealm="SecureArea"

Content-Type:text/html

Content-Length:311

<!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN"

"http://www.w3.org/TR/1999/REC-html401-19991224/loose.dtd">

<HTML>

<HEAD>

<TITLE>Error</TITLE>

<METAHTTP-EQUIV="Content-Type"CONTENT="text/html;charset=ISO-8859-1">

</HEAD>

<BODY><H1>401Unauthorized.</H1></BODY>

</HTML>

3.客户端发起有认证信息的请求

Java代码收藏代码

GET/private/index.htmlHTTP/1.0

Host:localhost

Authorization:BasicQWxhZGRpbjpvcGVuIHNlc2FtZQ==

4.服务端响应

Java代码收藏代码

HTTP/1.0200OK

Server:HTTPd/1.0

Date:Sat,27Nov200410:19:07GMT

Content-Type:text/html

Content-Length:10476

II.服务端的实现

认证失败响应

Php代码收藏代码

header('WWW-Authenticate:Basicrealm="Test"');

header('HTTP/1.1401Unauthorized');

客户端发送过来的用户名和密码通过$_SERVER['PHP_AUTH_USER']和$_SERVER['PHP_AUTH_PW']获得

III.客户端的使用

1.PHP/cURL

只需两个设置就可以实现HTTP基本认证。

Php代码收藏代码

curl_setopt($ch,CURLOPT_HTTPAUTH,CURLAUTH_BASIC);

curl_setopt($ch,CURLOPT_USERPWD,'username:password');

2.Javascript/AJAX

XMLHttpRequest对象的open方法提供了设置参数

Javascript代码收藏代码

xhr.open("GET","/",true,"username","password")

如果使用jQuery的话,用$.ajax方法

Javascript代码收藏代码

$.ajax({username:"username",password:"password"})

3.Linux/cURL

命令行下使用cURL发起请求

Java代码收藏代码

curl-uusername:passwordhttp://localhost/

参考资料:

HTTPAuthentication:BasicandDigestAccessAuthentication

Digestaccessauthentication

Basicaccessauthentication

Form形式的HTTPBasicAuthentication

相关推荐