【问题标题】:Android HttpClient reactive authenticationAndroid HttpClient 反应式身份验证
【发布时间】:2012-06-20 21:15:23
【问题描述】:

我正在尝试设置一个 Android 应用程序,我可以在其中访问任意代理或 HTTP 身份验证后面的 URL。也就是说,应用程序不会立即知道 URL 是否需要身份验证,而是会通过向用户询问凭据来响应身份验证请求,就像它对 Android 浏览器所做的那样。

我最近制定了how to request user authentication for a WebView,响应来自浏览器的身份验证请求,打开一个对话框,并将用户引导到目标页面。我希望对 HttpClient 做同样的事情。

在我看来,基本过程是:

  1. 通过HttpClient.execute 执行请求。
    • 如果不是带有正确标头的 401 或 407,则触发“完成”回调。
    • 否则...
  2. 弹出对话框询问用户名和密码。
  3. 通过HttpClient.getCredentialsProvider().setCredentials在HTTP客户端设置http凭据。
  4. 返回步骤 1,直到用户单击取消或服务器放弃。在这种情况下,使用收到的最后一个响应触发“失败”回调。

我是在正确的轨道上还是有人已经实现了类似的东西?我不想在这方面重新发明轮子。

【问题讨论】:

    标签: android http-authentication apache-httpclient-4.x


    【解决方案1】:

    你应该试试 apache 网站上的authentication example

    httpclient.getCredentialsProvider().setCredentials(
                        new AuthScope("localhost", 443),
                        new UsernamePasswordCredentials("username", "password"));
    

    java文件的直接链接是http://hc.apache.org/httpcomponents-client-ga/httpclient/examples/org/apache/http/examples/client/ClientAuthentication.java

    【讨论】:

    • 对,这是我解决方案的第三步。前两个步骤是验证是否存在身份验证要求(从响应中获取AuthScope)并显示对话框(从用户那里获取UsernamePasswordCredentials)。我真的很感兴趣是否有整个流程的现有实现,或者如果没有,是否有任何问题需要在流程中解决。
    • 不是最终答案,但您可能想看看stackoverflow.com/a/10850182/808940
    【解决方案2】:

    上述反应式方法确实有效。响应任意 401 或 407 请求是有效的,需要注意的是您需要支持您希望遇到的每个身份验证方案,因此UsernamePasswordCredentials 之类的内容不适用于 NTLM。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-04
      • 2019-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-26
      相关资源
      最近更新 更多