【发布时间】:2017-10-24 11:13:00
【问题描述】:
我为https://github.com/apache/incubator-livy/blob/master/docs/rest-api.md 的 Livy 的部分 REST API 编写了一个 Java 客户端。客户端使用 Spring 的 RestTemplate.getForObject() 和 postForObject() 分别发出 GET 和 POST 请求。 Livy 服务器由 Kerberos 保护。
GET /sessions 和 GET /batches 请求工作正常:我得到了 Livy 的预期响应。但是POST /sessions 和POST /batches 请求都失败了:
org.springframework.web.client.HttpClientErrorException: 401 Authentication required
有谁知道为什么 GET 请求成功时 POST 请求失败?我的代码对身份验证没有任何明确的作用。
我尝试过通过 Kerberos 对几个不同的用户进行身份验证,但我总是遇到这个问题。 Livy 是否需要额外的配置来允许来自特定用户的 POST 请求(因为 POST 请求有效地创建交互式会话或向 Spark 提交作业)?
【问题讨论】:
-
您是否跟踪了在 SPNego“协商”期间发送/接收的 HTTP 标头(始终以
401质询开始,但应以200或403结束)? GET 和 POST 的事件序列中的任何可见差异,例如在某个时候重定向? -
很久以前 WebHDFS 也有类似的问题,但由于 Java 6
netlibrary 中的一个错误...希望您使用的是更新的东西! -
感谢您的提示!不,我使用的是 Java 8(和 Livy v0.3.0 BTW)。我还没有设法跟踪这些 HTTP 标头,但与 GET 请求相比,Livy 似乎需要额外的 POST 请求安全性。目前正在尝试使用 Spring 的特殊版本
RestTemplate与 Kerberos 一起使用:KerberosRestTemplate。几天后我有机会再发更多... -
出于调试目的,您可以尝试
curl命令行 HTTP 查询(如果 Kerberos TGT 在默认缓存中可用),然后使用curl --negotiate -u : --trace-ascii - <some-GET-URL>然后-X POST --data 'blah blah' <some-POST-URL>
标签: kerberos spring-rest livy