python-2.7 - 获取 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 传输编码:分块
它给出了正确的响应,我在这里缺少什么?任何帮助表示赞赏。
解决方案
推荐阅读
- php - 如何让当前用户全名显示在表单验证消息中
- list - 从 Prolog DCG 创建列表
- c - 程序从文件读取时显示随机列表数据
- c# - FTP、GetRequestStream()、非英文字符时报错550
- arrays - 从 ArrayList 中查找最大值
- python - 如何在 ebaysdk 上导入产品 API?
- c# - Unity IAP:如何编写脚本来为当前版本的 Unity 提供无代码 IAP 功能?
- python - 将其他数据嵌入到 UDP 视频流 Python OPENCV
- laravel - 为什么 Eloquent HasMany 返回一个空集合?
- c++ - AST:当叶子类型不同时获取叶子值