首页 > 解决方案 > 获取 GSSException:在 kerberized 集群上调用 HDFS API 时检测到有缺陷的令牌错误

问题描述

我有一个带有 3 个节点的 kerberized 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 需要身份验证缓存控制:必须重新验证,无缓存,无存储日期:星期三,2018 年 5 月 30 日 02:50:04 GMT 编译指示:无缓存日期:星期三,2018 年 5 月 30 日 02:50: 04 GMT Pragma: no-cache Content-Type: text/html; charset=iso-8859-1 X-FRAME-OPTIONS: SAMEORIGIN WWW-Authenticate: Negotiate Set-Cookie: hadoop.auth=; 路径=/; HttpOnly 内容长度:1409

HTTP/1.1 200 OK 缓存控制:无缓存 过期时间:2018 年 5 月 30 日星期三 02:50:04 GMT 日期:2018 年 5 月 30 日,星期三 02:50:04 GMT 编译指示:无缓存 过期时间:2018 年 5 月 30 日,星期三格林威治标准时间 02:50:04 日期:2018 年 5 月 30 日,星期三 02:50:04 格林威治标准时间 编译指示:无缓存 内容类型:application/json X-FRAME-OPTIONS:SAMEORIGIN WWW-认证:协商 YGYGCSqGSIb3EgECAgIAb1cwVaADAgEFoQMCAQ+iSTBHoAMCAReiQAQ+6Seu0SyGmoqN4ZBOBO+QQQQ /jk8/BGjoK5NCmdlBRFPMSbCZXvVjNHLg9iPACGvM8V0jqXTM5UfQ= 设置Cookie:hadoop.auth="u=XXXX&p=XXXX@HOSTNAME&t=kerberos&e=1527684604664&s=tVsrEsDMBGV0To8hOPp8mLxyiSo="; 路径=/; HttpOnly 传输编码:分块

它给出了正确的响应,我在这里缺少什么?任何帮助表示赞赏。

标签: python-2.7apihadoopkerberoscloudera-cdh

解决方案


推荐阅读