`
usenrong
  • 浏览: 505764 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

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

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

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

整个交互过程如下:
用户访问需要认证的页面
服务端验证失败,响应401状态码,并响应WWW-Authenticate报头
客户端收到WWW-Authenticate报头,表示要提供认证信息
客户端将用户名和密码使用:号连接,并base64编码后方在报头里发送回服务端
例子:
1.客户端发起请求,无发送认证信息:
Java代码  收藏代码
GET /private/index.html HTTP/1.0 
Host: localhost 

2.服务端响应
Java代码  收藏代码
HTTP/1.0 401 Authorization Required 
Server: HTTPd/1.0 
Date: Sat, 27 Nov 2004 10:18:15 GMT 
WWW-Authenticate: Basic realm="Secure Area" 
Content-Type: text/html 
Content-Length: 311 
 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
"http://www.w3.org/TR/1999/REC-html401-19991224/loose.dtd"> 
<HTML> 
  <HEAD> 
    <TITLE>Error</TITLE> 
    <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1"> 
  </HEAD> 
  <BODY><H1>401 Unauthorized.</H1></BODY> 
</HTML> 

3.客户端发起有认证信息的请求
Java代码  收藏代码
GET /private/index.html HTTP/1.0 
Host: localhost 
Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ== 

4.服务端响应
Java代码  收藏代码
HTTP/1.0 200 OK 
Server: HTTPd/1.0 
Date: Sat, 27 Nov 2004 10:19:07 GMT 
Content-Type: text/html 
Content-Length: 10476 

II.服务端的实现
认证失败响应
Php代码  收藏代码
header('WWW-Authenticate: Basic realm="Test"'); 
header('HTTP/1.1 401 Unauthorized'); 

客户端发送过来的用户名和密码通过 $_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 -u username:password http://localhost/  


参考资料:
HTTP Authentication: Basic and Digest Access Authentication
Digest access authentication
Basic access authentication
Form形式的HTTP Basic Authentication
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics