使用HttpClient和Cookie进行抢占式基本身份验证

时间:2016-07-12 14:37:27

标签: java apache-httpcomponents big-ip

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

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

  1. 发送到网址的GET请求
  2. 302在BigIP实例上找到
  3. 重定向到my.policy - >创建了两个会话cookie(LastMRH_Session和MRHSession)
  4. 在my.policy上获取请求
  5. 401未经授权发回 - > MRHSession cookie使用新值更新
  6. 在命令提示符下输入凭据
  7. GET请求发送到my.policy,并在#5中添加了更新的MRHSession cookie并添加了授权标题
  8. 成功重定向
  9. 我在Java代码中创建了一个客户端上下文,一切都很好,除了它总是使用原始的MRHSession cookie并且没有获取401上返回的新会话cookie值(即它发回原始会话cookie) #7中没有更新的#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;
    }
    

0 个答案:

没有答案