HttpClient支持哪几种身份验证方案呢?

java-教程王 Java教程 发布时间:2022-04-27 22:03:29 阅读数:6214 1 HttpClient
下文笔者讲述HttpClient支持的http身份验证方案,如下所示

服务器认证

httpClient同服务器进行交互,
必须提供相应的登录凭证,这些凭证通常存储在HttpState实例中,
可以使用 
setCredentials(AuthScope authscope, Credentials cred) 
和 
getCredentials(AuthScope authscope)
设置和查询相应的授权信息
提前认证
为了减少服务器交互的开销,我们可提前设置身份验证
client.getParams().setAuthenticationPreemptive(true);
                  defaultcreds = new UsernamePasswordCredentials("username", "password");
client.getState().setCredentials(new AuthScope("myhost", 80, AuthScope.ANY_REALM), defaultcreds);

注意事项:
    在一些不受信任的站点中和web应用程序中,我们应谨慎使用默认凭证
	笔者建议非调试模式,应避免使用默认账号和密码

代理身份验证

代理身份验证,应使用
 setProxyCredentials(AuthScope authscope, Credentials cred)
 getProxyCredentials(AuthScope authscope)
设置和获取授权信息

身份认证方案

基本认证方案
这是一种最原始且兼容性非常好的身份认证方案,
它发送给服务器的用户名和密码都是未加密的信息
摘要式身份认证加密
它不通过网络传输用户名和密码,
而是使用用户名和密码对服务器发送过来的nonce值进行加密,作为服务器凭证传送
摘要式身份认证需要一个UsernamePasswordCredentials实例
NTLM身份认证
NTLM是HttpClient支持的最复杂的身份验证协议
 它是由Microsoft设计的专有协议,是一个未公开可用的规范
  早期的NTLM版本,没有Digest身份验证安全,
  但是这些在 Windows NT 4 的服务包中得到修复,现在此协议被认为比Digest身份验证更安全

NTLM身份验证要求NTCredentials实例可用于服务器的域名或默认凭据
 请注意,由于NTLM不使用领域的概念
 因此HttpClient使用服务器的域名作为领域的名称
 另请注意,提供给NTCredentials的用户名不应以域为前缀 
   即:"username"是正确
   而"DOMAIN\username"是不正确的

NTLM与基本身份验证和摘要式身份验证相比
 NTLM 的工作方式存在一些显着差异
 这些差异通常由HttpClient处理 
NTLM 身份验证的工作方式与 HttpClient API的其他身份验证几乎完全相同
唯一的区别是您需要提供“NTCredentials”而不是“UsernamePasswordCredentials”
(NTCredentials 实际上扩展UsernamePasswordCredentials
 因此如果需要,您可以在整个应用程序中使用 NTCredentials)
NTLM 身份验证的领域是要连接的计算机的域名,
因为服务器通常有多个引用它们的域名
只有 HttpClient 连接的域名(由 HostConfiguration 指定)用于查找凭据
通常建议在最初测试 NTLM 身份验证时,将领域作为默认值传递给 null。
NTLM 对连接而不是请求进行身份验证,因此每次建立新连接时都需要进行身份验证,并且在身份验证期间保持连接打开至关重要
因此,NTLM 不能同时用于代理和服务器的身份验证,NTLM也不能用于HTTP 1.0连接或不支持HTTP keep-alives的服务器
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

本文链接: https://www.Java265.com/JavaCourse/202204/3172.html

最近发表

热门文章

好文推荐

Java265.com

https://www.java265.com

站长统计|粤ICP备14097017号-3

Powered By Java265.com信息维护小组

使用手机扫描二维码

关注我们看更多资讯

java爱好者