`
ugibb510
  • 浏览: 132370 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

转:Basic and Digest Access Authentication (rfc2617) 及HttpClient实现

 
阅读更多

转:http://www.cnblogs.com/jcli/archive/2012/12/11/2812459.html

 

介绍Basic和Digest

http协议并没有定义相关的安全认证方面的标准,所以就有了Basic and Digest Access Authentication的定义来补充,它的目的就是补充一套基于http服务端的认证机制,保护相关的资源避免被非法用户访问,如果你要访问被保护的资源,则必需要提供合法的用户名和密码。

和https有什么关联?

basic & digest auth 和 https 没有任何关系。前者是为用户认证机制,后者是信息通道加密措施。

basic 和 digest有什么区别?

digest是basic的升级版,更加安全。因为basic是明文传输密码信息,而digest是加密后传输。

digest就是绝对安全的吗?

首先,这个世界上没有绝对的东西。digest默认用MD5(其它算法也可以)对密码进行加密,虽然相比basic认证的明文传输更安全,但是加密算法本身的安全性也值得怀疑(md5是可以反推出原文的)。再者,digest只是对认证信息的加密,后续的内容传输安全性得不到保障。所以https机制的作用就显现出来。

通过上面的相关信息,我们可以得到一个清晰的结论:如果你想加强自己的认证信息的保护,有两种选择,一是基于digest认证;别一种是在https通道上进行basic认证。

basic和digest认证流程

 

 

1,客户端请求受保护的资源
2,服务器检测到没有授权,则生成一个challenge返回给客户端
3,客户端根据challenge和相关信息计算出digest
4,附带3计算出的信息再次请求1中的资源
5,服务端根据已知的用户密码信息计算出digest并与4中请求的digest比较验证
6,服务端验证通过后返回资源给合法用户

Basic和Digest的认证都是按照上面的流程来,唯一不同的是3和5中计算digest的算法不同:Basic是将密码直接base64编码(明文),而Digest是用MD5进行加密后传输。

下面假设我们现在要请求:http://localhost:8080/index.html 这个路径,而它需要认证后才能访问。


Basic的流程如下:

  1. 在浏览器请求:http://localhost:8080/index.html
  2. 服务器返回401(unauthentication)代码,并附带一个包含challenge的头,格式如下:WWW-Authenticate    Basic realm="Admin All"
  3. 浏览器用:base64(username:password) 编码后的信息添加到请求头中再次请求1中的资源,如果用户名是tomcat,密码是tomcat,则base64(tomcat:tomcat)为(dG9tY2F0OnRvbWNhdA==)。所以头信息为:Authorization    Basic dG9tY2F0OnRvbWNhdA==
  4. 用3中计算的请求头信息再次请求1中的资源
  5. 服务器用3中相同的算法(base64)验证用户密码合法性
  6. 返回index.html的资源

Digest的流程和上面一样,只是challenge和digest的生成算法不同

  1. 在浏览器请求:http://localhost:8080/index.html
  2. 服务器返回401(unauthentication)代码,并附带一个包含challenge的头,格式如下:WWW-Authenticate    Digest realm="Admin All", qop="auth", nonce="1354760194666:4465c7b1921b6d769fd359e5152c453f", opaque="EE9C283E89AFB63E7FF6E2C04C524807"
  3. 浏 览器用MD5编码后的信息添加到请求头中再次请求1中的资源,如果用户名是tomcat,密码是tomcat,则生成的头信息:Authorization    Digest username="tomcat", realm="Admin All", nonce="1354760194666:4465c7b1921b6d769fd359e5152c453f", uri="/web/index.html", response="8d30e6438636fe21c6045246dd034372", opaque="EE9C283E89AFB63E7FF6E2C04C524807", qop=auth, nc=00000001, cnonce="9201a828891792b9"
  4. 用3中计算的请求头信息再次请求1中的资源
  5. 服务器用3中相同的算法(base64)验证用户密码合法性
  6. 返回index.html的资源

这里我们只是讨论流程,具体的challenge和digest的生成算法请参考:RFC2617

HttpClient的实现

示例代码:

HttpHost targetHost = new HttpHost("localhost", 8080);

		DefaultHttpClient client = new DefaultHttpClient();

		HttpContext context = new BasicHttpContext();
		context.setAttribute(ClientContext.CREDS_PROVIDER,
				new BasicCredentialsProvider());
		CredentialsProvider provider = (CredentialsProvider) context
				.getAttribute(ClientContext.CREDS_PROVIDER);
		provider.setCredentials(new AuthScope(targetHost.getHostName(),
				targetHost.getPort()), new UsernamePasswordCredentials("tomcat", "admin"));

		HttpGet get = new HttpGet("http://localhost:8080/web/Hello");
		HttpResponse response = client.execute(get, context);
		System.out.println(response.getStatusLine());
		HttpEntity entity = response.getEntity();
		String s = EntityUtils.toString(entity);
		System.out.println(s);

 

主要类结构图:

 

 

Auth流程图:

 

 

 

 

 

 

分享到:
评论

相关推荐

    RFC 2617中文版(HTTP Digest Authentication)

    RFC 2617中文版(HTTP Digest Authentication) RFC 2617中文版是对HTTP Digest Authentication的描述,该文档基于原英文版进行了校正和重新排版,以方便中文读者更好地理解和使用HTTP Digest Authentication机制。...

    RFC2617-cn 中文版

    摘要认证方案(Digest Access Authentication Scheme) 摘要认证方案是一种基于哈希加密的认证机制,它提供了一种安全的用户认证方法。该方案使用摘要值来代替明文密码,从而避免了密码的明文传输。摘要认证方案的...

    RFC2617中文文档

    RFC2617 是一份关于 HTTP 认证的协议规范文档,提供了基本访问鉴别方案(Basic Access Authentication scheme)和摘要访问鉴别方案(Digest Access Authentication scheme)的规范。 摘要鉴别方案是 HTTP 认证框架...

    HTTP digest RFC2671规范 加密实现(JAVA)

    通过以上解释,我们可以看到,HTTP Digest认证在Java中的实现涉及加密算法、HTTP请求构造以及对RFC2671规范的理解。这为我们提供了一种相对安全的认证方式,可以防止在非安全网络中传输明文密码。

    http-client-digest_auth:针对Crystal的RFC 2617摘要访问身份验证的实现

    摘要认证,基于RFC 2617标准,是一种非对称加密的身份验证方法,旨在解决基本认证(Basic Authentication)中明文传输密码的安全问题。它通过哈希函数处理用户密码,生成一个不可读的摘要,从而在传输过程中保护用户...

    RFC2617标准的Http认证(C和CPP两个工程)

    标题中的"RFC2617标准的Http认证"是指互联网工程任务组(IETF)发布的Request for Comments (RFC) 2617文档,该文档详细定义了HTTP基本认证和更安全的HTTP摘要认证(HTTP Digest Authentication)机制。HTTP摘要认证是...

    rfc 2617 鉴权

    本文档主要介绍了两种鉴权方案:基本访问鉴权(Basic Access Authentication)和摘要访问鉴权(Digest Access Authentication)。这两种鉴权方式都是为了验证客户端与服务器之间的通信过程中双方是否拥有相同的密钥...

    RFC2617-cn.pdf

    RFC2617-cn.pdf 是一个中文版本的文档,主要讲述了 HTTP 认证机制中的两种方法:基本认证 (Basic Access Authentication) 和摘要认证 (Digest Access Authentication)。这份文档是针对互联网团体在完善 HTTP 协议...

    物联网与短距离无线通信技术概述.ppt

    [13]RFC 2617, HTTP Authentication: Basic and Digest Access Authentication. [14]RFC 2616, Hypertext Transfer Protocol -- HTTP/1.1. [15]RFC 3986, Uniform Resource Identifier (URI): Generic Syntax. ...

    RFC2617中文版

    ### RFC2617中文版:HTTP Digest认证过程及消息头计算方法说明 #### 概述 本文档详细介绍了HTTP Digest认证的过程以及消息头的计算方法,并通过具体示例加以说明。HTTP Digest认证是一种用于验证客户端身份的方法...

    RFC 1-3093 中文版

    9. **RFC 2617:HTTP Authentication: Basic and Digest Access Authentication** - 描述了HTTP协议的基本认证和摘要认证机制,用于验证用户身份。 10. **RFC 3093:Obsoleting RFC1122 Requirements for Internet ...

    Java Portlet Specification 1.0

    * RFC 2617 HTTP Authentication: Basic and Digest Authentication * ISO 639 Code for the representation of names of languages * ISO 3166 Code (Country) list * OASIS Web Services for Remote Portlets ...

    rad rail plugin

    - RFC2617 "HTTP Authentication: Basic and Digest Access Authentication" 关于HTTP的基本和摘要认证方式,这是HTTP协议中常见的两种身份验证机制。 综上所述,"Rad Rail Plugin"可能是一个集成了多种网络协议...

    Laravel开发-digest-auth

    在本文中,我们将深入探讨Laravel框架中的摘要式身份验证(Digest Authentication),这是根据RFC 2617标准实现的一种安全认证机制。Laravel作为PHP的流行Web开发框架,提供了丰富的功能来支持开发者构建安全、高效...

    httpclient-4.5jar包

    对于需要身份验证的服务器,可以通过设置Basic、Digest或者其他认证机制来完成。 七、高级用法 HttpClient提供了许多高级特性,如Cookie管理、Redirect处理、重试策略、请求和响应拦截器等。开发者可以根据具体需求...

    通过PB代码实现访问Digest authentication认证

    针对PB 开发者,并需要访问Digest Authentication认证。 该案例是通过PB 2019 R3 Build 2170版本来开发的。需要使用到PB 2017 版本后的新功能httpclient对象及加密对象。

    HttpClient依赖jar包.zip

    7. **身份认证**:HttpClient支持多种身份认证机制,如Basic、Digest、NTLM等,适应不同服务器的认证需求。 8. **代理设置**:对于需要通过代理服务器访问的网络资源,HttpClient可以配置代理设置,进行代理通信。 ...

    httpclient4.5的JAR包

    对于HTTP认证,HttpClient提供了多种策略,如Basic、Digest、NTLM等,可以按需选择和配置。 总结来说,HttpClient 4.5是一个强大的HTTP客户端工具,其模块化设计和丰富功能使其成为Java开发者处理HTTP通信的理想...

    apache httpclient jar包

    - 支持多种认证机制,如Basic Auth、Digest Auth和NTLM。使用HttpAuthenticationStrategy和CredentialsProvider进行配置。 6. **重定向处理**: - 可以通过设置RedirectStrategy来控制HttpClient如何处理重定向,...

    okhttp-digest:okhttp的摘要身份验证器

    okhttp-digest okhttp的摘要身份验证器。 大多数代码是从Apache Http Client移植的。重要的该工件已从jcenter转移到了Maven Central! 坐标已从com.burgstaller:okhttp-digest:<version>到io.github.rburgst:okhttp-...

Global site tag (gtag.js) - Google Analytics