我有一个带有3个节点的kerberised CDH v5.14集群。我试图使用python调用HDFS API,如下所示
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身份验证需要缓存控制: must-revalidate,no-cache,no-store日期:2018年5月30日星期三02:50:04 GMT Pragma:no-cache日期:2018年5月30日星期三02:50:04 GMT Pragma:no-cache 内容类型:text / html; charset = iso-8859-1 X-FRAME-OPTIONS: SAMEORIGIN WWW-Authenticate:Negotiate Set-Cookie:hadoop.auth =; 路径= /; HttpOnly Content-Length:1409
HTTP / 1.1 200 OK缓存控制:无缓存过期时间:2018年5月30日星期三 格林威治标准时间02:50:04日期:2018年5月30日星期三02:50:04 GMT Pragma:no-cache 到期日:2018年5月30日星期三格林尼治标准时间02:50:04日期:2018年5月30日星期三02:50:04 GMT Pragma:no-cache Content-Type:application / json X-FRAME-OPTIONS: SAMEORIGIN WWW-Authenticate:谈判 YGYGCSqGSIb3EgECAgIAb1cwVaADAgEFoQMCAQ + iSTBHoAMCAReiQAQ + 6Seu0SSYGmoqN4hdykSQ55ZcP + juBO / JK8 / BGjoK5NCmdlBRFPMSbCZXvVjNHLg9iPACGvM8V0jqXTM5UfQ = 设置Cookie: hadoop.auth = “U = XXXX&安培; P = XXXX @ HOSTNAME&amp; T公司的Kerberos =急症= 1527684604664&安培; S = tVsrEsDMBGV0To8hOPp8mLxyiSo =”; 路径= /; HttpOnly Transfer-Encoding:chunked
它给出了正确的答案,我在这里缺少什么?任何帮助表示赞赏。