1

我正在尝试使用 HttpClientContext 设置抢占式基本身份验证。我在下面描述的功能是利用 JWT 令牌和 F5/BigIP 进行应用程序和服务身份验证和授权的更大解决方案的一部分。

通过成功的 curl 命令和网络跟踪,我可以看到以下工作流程:

  1. GET 请求发送到 URL
  2. 在 BigIP 实例上发现 302
  3. 重定向到 my.policy -> 创建两个会话 cookie(LastMRH_Session 和 MRHSession)
  4. 在 my.policy 上获取请求
  5. 401 未授权发回 -> MRHSession cookie 更新为新值
  6. 在命令提示符处输入凭据
  7. GET 请求发送到 my.policy,并在 #5 中更新了 MRHSession cookie,并添加了授权标头
  8. 成功重定向

我在 Java 代码中创建了一个客户端上下文,除了它总是使用原始的 MRHSession cookie 并且不获取在 401 上返回的新会话 cookie 值(即它在 #7 中将原始会话 cookie 发送回)之外,一切都很好不是来自 #5 的更新版本)并且 F5 抱怨会话 ID 无效。

以下是我正在使用的 http 组件版本的 gradle 参考:

compile group: 'org.apache.httpcomponents', name: 'httpclient', version: '4.3.4'

客户端上下文创建如下所示:

public HttpClientContext create(final URI uri) {
   HttpHost httpHost = httpHostFactory.create(uri);
   HttpClientContext context = HttpClientContext.create();
   context.setAuthCache(authCacheFactory.create(httpHost));
context.setCredentialsProvider(credentialsProviderFactory.create(httpHost));       
    return context;
}
4

0 回答 0