У меня есть Kerberised CDH v5.14 кластер с 3 узлами. Я пытаюсь вызвать HDFS API, используя python, как показано ниже
baseurl = "http://<host_name>:50070/webhdfs/v1/prod/?op=LISTSTATUS"
__, krb_context = kerberos.authGSSClientInit("HTTP/<host_name>")
#kerberos.authGSSClientStep(krb_context, "")
negotiate_details = kerberos.authGSSClientResponse(krb_context)
headers = {"Authorization": "Negotiate " + str(negotiate_details)}
r = requests.get(baseurl, headers=headers)
print r.status_code
Возвращается ошибка ниже
GSSException: Defective
token detected (Mechanism level: GSSHeader did not find the right tag)
HTTP ERROR 403
Но то же самое прекрасно работает, когда я запускаю его, используя curl
curl -i --negotiate -u: http://<host_name>:50070/webhdfs/v1/prod/?op=LISTSTATUS
HTTP / 1.1 401 Требуется аутентификация Cache-Control: must-revalidate, no-cache, no-storeДата: среда, 30 мая 2018 года 02:50:04 GMT Прагма: без кэширования Дата: среда, 30 мая 2018 года 02:50:04 GMT Прагма: без кэширования Тип содержимого: text / html;charset = iso-8859-1 X-FRAME-OPTIONS: SAMEORIGIN WWW-Authenticate: согласовать Set-Cookie: hadoop.auth =;Path = /;HttpOnly Content-Length: 1409
HTTP / 1.1 200 OK Cache-Control: no-cache Истекает: Ср, 30 мая 2018 02:50:04 GMT Дата: Ср, 30 мая 2018 02:50:04 GMTPragma: no-cache Срок действия истекает: ср., 30 мая 2018 г. 02:50:04 GMT Дата: ср., 30 мая 2018 г. 02:50:04 GMTWWW-Authenticate: согласование YGYGCSqGSIb3EgECAgIAb1cwVaADAgEFoQMCAQ + iSTBHoAMCAReiQAQ + 6Seu0SSYGmoqN4hdykSQ55ZcP + juBO / jk8 / BGjoK5NCmdlBRFPMSbCZXvVjNHLg9iPACGvM8V0jqXTM5UfQ = Set-Cookie: hadoop.auth = "и = XXXX & р = XXXX @ имя_машина & т = & й Керберос = 1527684604664 & s = tVsrEsDMBGV0To8hOPp8mLxyiSo =";Path = /;HttpOnly Transfer-Encoding: chunked
и он дает правильный ответ, что мне здесь не хватает?Любая помощь приветствуется.