首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >先发制人认证为什么

先发制人认证为什么
EN

Stack Overflow用户
提问于 2011-09-20 08:55:33
回答 2查看 17.9K关注 0票数 9

为什么需要先发制人的认证?

System.setProperty("httpclient.authentication.preemptive",“真”);

我用java编写了web服务访问客户端程序。我们在call对象中设置用户名和密码,这是非常有效的。

最近,我们的服务提供者在他们身边做了一些更改,之后他们在web服务调用中没有接收用户名和密码,因为他们没有接收用户名和密码,所以我们无法连接到他们的(提供者)服务。

然后我在谷歌上搜索并发现了先发制人的身份验证。在调用web服务时,我们将"httpclient.authentication.preemptive“设置为"true”--httpclient.authentication.preemptive "true");然后,我们就能够接收来自服务提供者的响应。

当我们删除System.setProperty("httpclient.authentication.preemptive",“真”;行时,我们就无法连接到它们的服务。

EN

回答 2

Stack Overflow用户

发布于 2018-07-09 08:01:09

以下是常规身份验证的工作原理(也称为先发制人身份验证--例如Curl是如何实现的):

用户指示客户端向http://user:pass@example.com

  • Client发出请求,并使用头部发出请求,例如:Authorization: Basic dXNlcjpwYXNz

  • Server对用户进行身份验证并使用200

进行响应。

以下是非先发制人身份验证的工作原理(例如,Apache的HttpClient是如何实现的):

用户指示客户端向http://user:pass@example.com

  • Client发出请求,在没有authentication

  • Server响应的情况下使用401进行请求,而头请求则像:WWW-Authenticate: Basic realm="Default Realm"

  • Client使用头部进行第二次请求:Authorization: Basic dXNlcjpwYXNz

  • Server对用户进行身份验证并使用200

进行响应。

为什么我们要用第二种方法?它确保只有需要身份验证的服务器才能获得您的密码。但这确实意味着服务器必须以正确的方式进行响应( WWW-Authenticate头)。也许这就是在您的情况下失败的原因,以及为什么您必须覆盖您的HTTP客户端来强制先发制人的身份验证。

(如果您想更好地了解客户端和服务器之间的实际情况,我建议使用Wireshark。您可以在这里阅读Apache的HTTP关于以下主题的文档:http://hc.apache.org/httpclient-3.x/authentication.html )

票数 19
EN

Stack Overflow用户

发布于 2012-02-27 14:06:53

当我们在client-config.wsdd文件中将传输pivot="java:org.apache.axis.transport.http.HTTPSender“更改为传输时。这个问题在没有设置System.setProperty("httpclient.authentication.preemptive",“true”的情况下得到解决;

客户端-config.wsdd-

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?> 
<deployment 
    name="commonsHTTPConfig" 
    xmlns="http://xml.apache.org/axis/wsdd/" 
    xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">

  <!-- use CommonsHTTPSender instead of the default HTTPSender -->
  <transport name="http" pivot="java:org.apache.axis.transport.http.CommonsHTTPSender" />  

  <transport name="local" pivot = "java:org.apache.axis.transport.local.LocalSender" /> 
  <transport name="java" pivot="java:org.apache.axis.transport.java.JavaSender" /> 
</deployment>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7482523

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档