【问题标题】:WWW-Authentication / NTLM Negotiate using HttpClient with current user credentialsWWW-Authentication / NTLM 使用具有当前用户凭据的 HttpClient 进行协商
【发布时间】:2015-01-22 06:32:01
【问题描述】:

寻找有关如何获取 HttpClient (httpclient 4.3.6) 以向 IIS REST 服务验证当前用户的指针。

我可以使用 UrlConnection 连接没有问题,因为它似乎可以处理开箱即用的 WWW-Authentication 协议。

我已经转移到 HttpClient 以利用多部分 POST/PUT (FileEntity) 并且我发现 HttpClient 不处理 WWW-Authentication,它只是以 401 失败,这是该过程的第一部分。

我发现了一些示例,这些示例提供了 NTLM 凭据等...但我不想捕获凭据,我想使用当前的 Windows 身份执行请求。

是否有一些代码或 API 可以用来代表我进行管理?我不想捕获用户名和密码,我只想提供当前用户凭据。我需要使用像 SPNEGO 这样的第三方库吗?

提前非常感谢

【问题讨论】:

    标签: java iis apache-httpclient-4.x www-authenticate


    【解决方案1】:

    您可能想试用 HttpClient 4.4(即将作为 GA 发布)。在 Windows 操作系统上运行时,它通过 JNA 通过 SSPI 支持本机 Windows Negotiate、Kerberos 和 NTLM。请注意,此功能仍被认为是实验性的。您的里程可能会有所不同。

    http://hc.apache.org/httpcomponents-client-4.4.x/httpclient-win/examples/org/apache/http/examples/client/win/ClientWinAuth.java

    【讨论】:

    • 谢谢!这很好用!我必须包含 JNA 库,并且一切正常。我还对代理和信任存储进行了排序,以便它可以与 Fiddler 一起使用。我会发布我的代码,因为它可能对像我这样的其他新手有帮助。 :-)
    • 我是否有办法阻止发送初始请求的正文?我正在上传一个文件,它发生了两次。
    • @Nicholas:尝试启用“期望:继续”握手。或者,您可能希望向服务器发出 GET 或 HEAD 以强制使用廉价方法进行身份验证。
    • 是的,我都试过了。预期:“100-继续”导致 SharePoint 的响应无效,可能是 Microsoft 问题?奇怪的是,当我通过 Fiddler 代理连接时该设置有效。我之前使用相同的 HttpClient(但使用 HttpGet 和不同的 REST URL)发出了 GET,但它没有保留会话,是否需要设置其他内容才能保留会话?或者我可以只获取“授权”标题吗? (不确定这是否可能)再次感谢您!
    • @Nicholas:MS 软件的“预期:继续”问题是一个已知问题。当使用 GET 强制授权名称时,请务必使用相同的 HttpContext。详情见:hc.apache.org/httpcomponents-client-4.3.x/tutorial/html/…
    猜你喜欢
    • 1970-01-01
    • 2015-01-10
    • 2014-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多