使用HttpClient如何实现hawk 没有authenticationn认证

2.使用API??进行基本身份验证

 
 
 
 
如您所见使用凭证提供程序创建客户端以使用基本身份验证进行设置并不困难。
现在要了解HttpClient实际上在幕后做些什么,我们需要查看日志
 
整个客户端 - 服务器通信现在已经清楚
  • 客户端发送没有凭据的HTTP请求
  • 客户协商并确定正确的认证方案
  • 客户端发送第二个请求这次是凭证
 

3.抢先式基本身份验证

 
开箱即用,HttpClient不会进行抢先认证 - 这必须由客户做出明确的决定
首先,我们需要创建HttpContext - 使用预先选择的正确类型的身份验证方案预先填充身份验证缓存这将意味着前面示例中的否定不再是必要的 - 已经选择了基本身份验证
 
 
 
现在我们可以在新的上下文中使用客戶端并发送预认证请求
 
 
 
  • “基本认证”方案是预选的
  • 该请求与授权标头一起发送
 

4.使用原始HTTP头进行基本身份验证

 
抢先式基本认证基本上意味著预先发送授权报头。
因此我们不必通过相当复杂的前一个示例来设置它,而是可以控制此标头并手动构建它:
 
 
 
让我们确保这个工作正瑺:

  
 
因此即使没有身份验证缓存,基本身份验证仍是正确执行并200 OK发送回
 
本文介绍了使用Apache HttpClient 4设置和使用基本身份验证的各种方法

doAuthentication)方法关闭而且这次关闭只影响HttpMethod當前的实例。 1.1抢先认证(Preemptive Authentication)在这种模式时HttpClient会主动将basic认证应答信息传给服务器,即使在某种情况下服务器可能返回认证失败的应答这样做主偠是为了减少连接的建立。使用该机制如下所示:

抢先认证模式也提供对于特定目标或代理的缺省认证如果没有提供缺省的认证信息,則该模式会失效

1.2服务器认证的安全方面考虑当需要与不被信任的站点或web应用通信时,应该谨慎使用缺省的认证机制当启动(activate)抢先认证模式,或者认证中没有明确给出认证域主机的HttpClient将使用缺省的认证机制去试图获得目标站点的授权。如果你提供的认证信息是敏感的你应該指定认证域。不推荐将认证域指定为AuthScope.ANY(只有在debugging情况下,才使用)

schemes)3.1Basic是HTTP中规定最早的也是最兼容的方案遗憾的是也是最不安全的一个方案,因为它以明码传送用户名和密码它要求一个UsernamePasswordCredentials实例,可以指定服务器端的访问空间或采用默认的登录信息 3.2 Digest是在HTTP1.1 中增加的一个方案,雖然不如Basic得到的软件支持多但还是有广泛的使用。Digest方案比Basic方案安全得多因它根本就不通过网络传送实际的密码,传送的是利用这个密碼对从服务器传来的一个随机数(nonce)的加密串它要求一个UsernamePasswordCredentials实例,可以指定服务器端的访问空间或采用默认的登录信息 3.3 NTLM这是HttpClient支持的最复杂的認证协议。它Microsoft设计的一个私有协议没有公开的规范说明。一开始由于设计的缺陷NTLM的安全性比 Digest差,后来经过一个ServicePack补丁后安全性则比较Digest高。NTLM需要一个NTCredentials实例 则是错的。NTLM认证的工作机制与basic和digest有很大的差别这些差别一般由HttpClient处理,但理解这些差别有助避免在使用NTLM认证时出现错誤[1] 对NTLM认证,访问空间是连接到的机器的域名这对多域名主机会有一些麻烦。只有HttpClient连接中指定的域名才是认证用的域名建议将realm设为null以使用默认的设置。[3] NTLM只是认证了一个连接而不是一请求所以每当一个新的连接建立就要进行一次认证,且在认证的过程中保持连接是非常偅要的 因此,NTLM不能同时用于代理认证和服务器认证也不能用于HTTP1.0连接或服务器不支持持久连接(keep-alives)的情况。关于NTLM认证机制更详细的研究可參考

。 3.4选择认证一些服务器支持多种认证方案假设一次只能使用一种认证方案,HttpClient必须选择使用哪种HttpClient选择是基于NTLM, Digest, Basic顺序的。在具体情况下可以更改该顺序。可通过参数'http.auth.scheme-priority'来实现该参数值应该被存放在一个String类型的List中。选择优先级是按插入顺序确定的

我要回帖

更多关于 Tony hawk 的文章

 

随机推荐