【问题标题】:Proper use of HttpRequestInterceptor and CredentialsProvider in doing preemptive authentication with HttpClient正确使用 HttpRequestInterceptor 和 CredentialsProvider 使用 HttpClient 进行抢先式身份验证
【发布时间】:2011-02-16 15:43:59
【问题描述】:

我正在使用我创建的一些 REST 服务在 Android 中编写一个应用程序。这些 Web 服务不会发出标准的 Apache Basic 质询/响应。相反,在服务器端代码中,我想从 HTTP(S) 请求中询问用户名和密码,并将其与数据库用户进行比较,以确保他们可以运行该服务。

我正在使用 HttpClient 来执行此操作,并且在初始登录后我将凭据存储在客户端上(至少我认为它是这样工作的)。所以这就是我卡住的地方。 HttpClient 下的抢先式身份验证要求您将拦截器设置为静态成员。这是 Apache 组件使用的示例。

    HttpRequestInterceptor preemptiveAuth = new HttpRequestInterceptor() {
        @Override
        public void process( final HttpRequest request, final HttpContext context) throws HttpException, IOException {
            AuthState authState = (AuthState) context.getAttribute(ClientContext.TARGET_AUTH_STATE);
            CredentialsProvider credsProvider = (CredentialsProvider) context.getAttribute(
                    ClientContext.CREDS_PROVIDER);
            HttpHost targetHost = (HttpHost) context.getAttribute(ExecutionContext.HTTP_TARGET_HOST);

            if (authState.getAuthScheme() == null) {
                AuthScope authScope = new AuthScope(targetHost.getHostName(), targetHost.getPort());
                Credentials creds = credsProvider.getCredentials(authScope);
                if (creds != null) {
                    authState.setAuthScheme(new BasicScheme());
                    authState.setCredentials(creds);
                }
            }
        }
    };

所以问题是这样的。这个的正确用途是什么?当应用程序启动时,我会将其作为应用程序的一部分启动吗?从内存中提取用户名和密码,然后使用它们创建这个 CredentialsProvider,然后由 HttpRequestInterceptor 使用?或者有没有办法更动态地做到这一点?

【问题讨论】:

    标签: java android rest restful-authentication


    【解决方案1】:

    没关系,我发现出了什么问题。我再次查看了 Apache 示例,并意识到在创建我正在使用的 HttpHost 对象时我没有传递“http”。这是完全无关的。呃。

    【讨论】:

      【解决方案2】:

      HttpClient 不太喜欢抢先式认证。

      如果您的 REST API 支持 BASIC 身份验证,那么自己放入正确的标头可能会更简单。 Here is a sample Twitter client,使用 Twitter API,使用了这种技术。

      【讨论】:

      • 我让它在没有抢先身份验证的情况下工作。原来这就是答案。谢谢。
      猜你喜欢
      • 2023-03-12
      • 1970-01-01
      • 1970-01-01
      • 2011-01-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-24
      相关资源
      最近更新 更多