IT评测·应用市场-qidao123.com
标题:
HttpClient支持哪几种身份验证方案呢?
[打印本页]
作者:
莱莱
时间:
2022-8-30 09:26
标题:
HttpClient支持哪几种身份验证方案呢?
转自:
http://www.java265.com/JavaCourse/202204/3172.html
下文笔者讲述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的服务器
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
欢迎光临 IT评测·应用市场-qidao123.com (https://dis.qidao123.com/)
Powered by Discuz! X3.4