博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
构建RESTful Web Service - 验证的实现和使用(HTTP 基本认证)
阅读量:4171 次
发布时间:2019-05-26

本文共 1836 字,大约阅读时间需要 6 分钟。

  • 博客分类: 
因为RESTful的无状态特性,导致无法知道当前的请求方是否可靠,所以不得不对每次请求进行验证。但是如何更语义化的将需要验证的信息附加到HTTP里呢?现在比较常见的方式是把验证信息作为参数发送过去,但是这样会违反RESTful的原则。例如,GET /user/1/xx验证信息xx。幸好的是HTTP协议本身定义了两种认证方式,Basic和Digest。 
一、HTTP 基本认证(Basic Athorization) 
I.简介 
HTTP基本认证比较简单,明文发送,没有签名,安全性低,没作用域,只能适用于一般场合。 
整个交互过程如下: 
  1. 用户访问需要认证的页面
  2. 服务端验证失败,响应401状态码,并响应WWW-Authenticate报头
  3. 客户端收到WWW-Authenticate报头,表示要提供认证信息
  4. 客户端将用户名和密码使用:号连接,并base64编码后方在报头里发送回服务端
例子: 
1.客户端发起请求,无发送认证信息: 
Java代码  
  1. GET /private/index.html HTTP/1.0  
  2. Host: localhost  
2.服务端响应 
Java代码  
  1. HTTP/1.0 401 Authorization Required  
  2. Server: HTTPd/1.0  
  3. Date: Sat, 27 Nov 2004 10:18:15 GMT  
  4. WWW-Authenticate: Basic realm="Secure Area"  
  5. Content-Type: text/html  
  6. Content-Length: 311  
  7.   
  8. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"  
  9.  "http://www.w3.org/TR/1999/REC-html401-19991224/loose.dtd">  
  10. <HTML>  
  11.   <HEAD>  
  12.     <TITLE>Error</TITLE>  
  13.     <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">  
  14.   </HEAD>  
  15.   <BODY><H1>401 Unauthorized.</H1></BODY>  
  16. </HTML>  
3.客户端发起有认证信息的请求 
Java代码  
  1. GET /private/index.html HTTP/1.0  
  2. Host: localhost  
  3. Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==  
4.服务端响应 
Java代码  
  1. HTTP/1.0 200 OK  
  2. Server: HTTPd/1.0  
  3. Date: Sat, 27 Nov 2004 10:19:07 GMT  
  4. Content-Type: text/html  
  5. Content-Length: 10476  
II.服务端的实现 
认证失败响应 
Php代码  
  1. header('WWW-Authenticate: Basic realm="Test"');  
  2. header('HTTP/1.1 401 Unauthorized');  
客户端发送过来的用户名和密码通过 $_SERVER['PHP_AUTH_USER'] 和 $_SERVER['PHP_AUTH_PW'] 获得 
III.客户端的使用 
1.PHP/cURL 
只需两个设置就可以实现HTTP 基本认证。 
Php代码  
  1. curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);  
  2. curl_setopt($ch, CURLOPT_USERPWD, 'username:password');  
2.Javascript/AJAX 
XMLHttpRequest对象的open方法提供了设置参数 
Javascript代码  
  1. xhr.open("GET""/"true"username""password")  
如果使用jQuery的话,用$.ajax方法 
Javascript代码  
  1. $.ajax({username : "username", password : "password"})  
3.Linux/cURL 
命令行下使用cURL发起请求 
Java代码  
  1. curl -u username:password http://localhost/   
参考资料: 
 
 
 
 

转载地址:http://likai.baihongyu.com/

你可能感兴趣的文章
JAVA 访问 MySQL 数据库问题
查看>>
JAVA 访问数据库问题
查看>>
MySQL Workbench建表时PK, NN, UQ, BIN, UN, ZF, AL的意思
查看>>
一个通过Java连接MYSQL数据库的代码
查看>>
登陆的参数 List
查看>>
android 向数据库写入图片信息 读取图片信息
查看>>
Android.Could not find *.apk
查看>>
使用next()和nextLine()方法接收从键盘输入字符串型数据
查看>>
android 定位 代码关于android gps定位最容易出现崩溃的问题总结(转)
查看>>
JNI
查看>>
DownloadManager下载管理类2.3新增API介绍
查看>>
Android基于TranslateAnimation的动画动态菜单
查看>>
android NDK中的GCC编译器
查看>>
Android NOtification 使用
查看>>
Android的SharedPreferences保存与删除数据简单实例
查看>>
android 如何从sqlite读取数据到spinner下拉中显示
查看>>
Android实现开机自动运行程序
查看>>
最近几天搭建MySql且连接问题总结
查看>>
搭建Tomcat
查看>>
在MyEclipse中运行tomcat出现Error initializing endpoint错误
查看>>