`
willko
  • 浏览: 387071 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

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

    博客分类:
  • php
阅读更多
因为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.客户端发起请求,无发送认证信息:
GET /private/index.html HTTP/1.0
Host: localhost

2.服务端响应
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.客户端发起有认证信息的请求
GET /private/index.html HTTP/1.0
Host: localhost
Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==

4.服务端响应
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.服务端的实现
认证失败响应
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 基本认证。
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_setopt($ch, CURLOPT_USERPWD, 'username:password');


2.Javascript/AJAX
XMLHttpRequest对象的open方法提供了设置参数
xhr.open("GET", "/", true, "username", "password")


如果使用jQuery的话,用$.ajax方法
$.ajax({username : "username", password : "password"})


3.Linux/cURL
命令行下使用cURL发起请求
curl -u username:password http://localhost/ 


参考资料:
HTTP Authentication: Basic and Digest Access Authentication
Digest access authentication
Basic access authentication
Form形式的HTTP Basic Authentication

分享到:
评论
1 楼 mrfeng 2013-11-06  
Digest 方式呢?

相关推荐

    C# 一个简单的 Restful 服务端和 Restful 客户端 Demo

    用于构建RESTful服务的首选工具就是ASP.NET Core中的Web API。 3. **创建RESTful服务端**: - **Controller**:在ASP.NET Core中,控制器是处理HTTP请求的核心组件,通常包含一系列处理特定资源的方法。 - **HTTP...

    Java+restful+Web+Service实战

    Java RESTful Web Service实战是Java开发领域中一个重要的实践教程,它主要涵盖了使用Java技术和RESTful架构风格来创建高效、可扩展的网络服务。REST(Representational State Transfer)是一种网络应用程序的设计...

    spring-boot-04-web-restfulcrud

    在Spring Boot中,我们使用`@RestController`注解创建REST控制器,结合`@RequestMapping`、`@GetMapping`、`@PostMapping`、`@PutMapping`和`@DeleteMapping`等注解来处理不同的HTTP请求方法。 5. **实体类与数据...

    Building a RESTful Web Service with Spring

    #### 二、使用Maven和Gradle构建RESTful Web服务 在构建RESTful Web服务时,选择合适的构建工具非常重要。常见的构建工具有Apache Maven和Gradle,它们都能有效地管理项目的依赖关系。 - **Apache Maven**:Maven...

    使用Springboot系统构建RESTful Web服务.pdf

    通过本篇文章的学习,我们不仅掌握了如何使用Spring Boot快速构建RESTful Web服务的基本技能,还深入了解了RESTful架构的设计原则及其在实际应用中的实现细节。希望这些知识点能够帮助读者在未来的工作中更加高效地...

    使用spring构建RESTful的Web服务

    ### 使用Spring构建RESTful的Web服务 #### REST原则与特性 - **统一接口**:REST(Representational State Transfer)架构风格的核心原则之一是其统一接口,即一组定义明确的操作方式,使得客户端能够与服务器交互...

    《Java Restful Web Service实战》源代码.zip

    通过学习和实践《Java Restful Web Service实战》中的源代码,开发者不仅可以掌握RESTful服务的设计原则,还能深入了解如何在Java环境中实现这些服务,从而提升自己的技能和经验。这个压缩包提供了一个宝贵的资源,...

    MyEclipse下的Restful Web Service的Demo

    【标题】"MyEclipse下的Restful Web Service的Demo"是一个示例项目,展示了如何在MyEclipse集成开发环境中创建和使用RESTful Web服务。REST(Representational State Transfer)是一种软件架构风格,常用于构建Web...

    Restful web service+MFC ATM系统(带详细文档设计)

    Restful web service是一种轻量级的HTTP协议应用方式,它以资源为中心,通过HTTP方法(GET、POST、PUT、DELETE等)来操作和管理这些资源。在这个“C++基于Restful web service ATM银行取款系统”中,开发者利用了...

    Building RESTful Web Services with .NET Core [PDF]

    根据提供的文件信息,本书《利用 .NET Core 构建 RESTful Web 服务》是一本全面介绍如何使用 .NET Core 平台开发 RESTful Web 服务的技术书籍。下面将基于本书的目录来概述每一章节的关键知识点。 ### 第一章:入门...

    1-Java RESTful Web Service实战.part1.rar

    理解这些是构建RESTful服务的基础。 2. **Java JAX-RS标准**:Java中实现RESTful服务的主要API是Java API for RESTful Web Services (JAX-RS)。这部分可能介绍了JAX-RS 2.0规范,包括如何使用`@Path`、`@GET`、`@...

    RESTful Java Web Services

    在IT行业中,Web服务是构建分布式系统的关键技术之一,RESTful Java Web Services是现代Web开发中的一个重要概念。本文将深入探讨REST(Representational State Transfer)架构风格及其在Java中的实现,特别是与...

    WCF + RESTful + 基本认证

    通过分析这些源码,你可以学习到如何在WCF中集成RESTful和基本认证的具体步骤,以及如何扩展WCF的行为来满足特定需求。 总结来说,WCF与RESTful的结合让服务更符合Web标准,而基本认证则为这些服务提供了基础的安全...

    tugas-web-service-源码.rar

    7. **文档**:可能包括README文件或Markdown文档,解释如何构建、运行和使用Web服务。 要学习这个项目,你需要先解压缩文件,然后查看README或其他文档来了解如何构建和运行项目。源代码中可能包含注释,帮助理解...

    restful-web-service

    RESTful Web服务是一种基于HTTP协议的、轻量级的网络通信方式,广泛应用于现代Web应用...以上内容涵盖了使用Java和Spring框架构建RESTful Web服务的基本概念和技术要点,实际开发中还需要结合具体需求进行调整和优化。

    Restful C# 服务端篇之实现RestFul Service开发(简单实用)

    在C#中,我们可以使用ASP.NET Core框架来构建RESTful服务。ASP.NET Core提供了一个轻量级、高性能的平台,非常适合开发Web API。以下是一些关键步骤: 1. **创建项目**:使用Visual Studio或命令行工具dotnet new,...

    使用 Spring 3 来创建 RESTful Web Services

    RESTful Web Services 是一种基于 Representational State Transfer(表述性状态转移)架构风格的 Web 应用设计模式,它强调资源的表述和状态转换,常用于构建高效、可伸缩的互联网应用程序。Spring 框架,特别是其 ...

    Spring-Boot-Restful-Web-Service

    6. **安全控制**: Spring Boot集成了Spring Security,可以轻松实现认证(Authentication)和授权(Authorization)。 7. **Swagger**: 可以集成Swagger来生成API文档,方便开发者理解和使用API。 通过以上知识点...

    RESTful webservices – Client API in Java - Jersey

    - **RESTEasy**:提供了一套完整的框架来构建RESTful Web Services。 #### 四、Jersey客户端API的优势 - **作为JAX-RS规范的一部分**,Jersey客户端API经过严格的内部测试,确保了其生产级别的稳定性和可靠性。 - ...

    gs-rest-service:构建RESTful Web服务::了解如何使用Spring创建RESTful Web服务

    在IT行业中,构建RESTful Web服务是开发现代Web应用程序的核心技术之一。REST(Representational State Transfer)是一种架构风格,用于设计网络应用程序,尤其适合互联网规模的分布式系统。本教程将聚焦于使用...

Global site tag (gtag.js) - Google Analytics