使用python请求的api连接\u kerberos

ar7v8xwq  于 2021-06-01  发布在  Hadoop
关注(0)|答案(1)|浏览(589)

这是我第一次尝试使用kerberos身份验证通过python(从windows)连接到api。我已经做了几天了,但我的进步已经停滞了。以下是我使用过的一些参考资料:
这是我找到的最好的教程,但它似乎使用了一个不推荐使用的模块,而不是请求\u kerberos:http://python-notes.curiousefficiency.org/en/latest/python_kerberos.html
https://pypi.org/project/requests-kerberos/
https://programtalk.com/python-examples/requests_kerberos.httpkerberosauth/
以下是我到目前为止所做的尝试(我将屏蔽敏感信息):

import requests
from requests_kerberos import HTTPKerberosAuth
r=requests.get("https://apiServer.hadoop.company.com:23232/templeton/v1/ddl/database/",auth=HTTPSKerberosAuth)

以下是一些输出:

r.status_code

401

r.headers

{'content-length':'1321','set cookie':'hadoop.auth=;路径=/;httponly','服务器':'jetty(7.6.0.v20127)','缓存控制':'必须重新验证,没有缓存,没有存储','内容类型':'文本/html;charset=iso-8859-1,'www authenticate':'协商'}

r.text

<html>\n<head>\n<meta http-equiv="Content-Type" 
content="text/html;charset=ISO
-8859-1"/>\n<title>Error 401 Authentication 
required</title>\n</head>\n<body>\n<
h2>HTTP ERROR: 401</h2>\n<p>Problem accessing /templeton/v1/ddl/database/. 
Reason:\n<pre>    Authentication required</pre></p>\n<hr /><i><small>Powered 
by Jetty://</small></i>

这些输出是否至少表明服务器正在接收我的请求?
如果我使用curl从我们的linux环境连接到api,它就可以正常工作,并收到预期的输出:

curl --negotiate -i -u :  'http://apiServer.hadoop.company.com:23232/templeton/v1/ddl/database/'

http/1.1 401身份验证要求www authenticate:negotiate set cookie:hadoop.auth=;路径=/;httponly缓存控制:必须重新验证,无缓存,无存储内容类型:text/html;字符集=iso-8859-1内容长度:1321服务器:jetty(7.6.0.v20230127)
http/1.1 200 ok www authenticate:negotiate ygy1cwvaadagcaq+istbhoamcariqaq+sf/nekepw09b/cbodrina7qn+aenruw2v+ow7y7rk9powga8hrxc3rxkxck=set cookie:hadoop.auth=“u=svc-qa-dsafqa-dev&p=svc-fd-itdflea-dev@hadoop.company.com&t=kerberos&e=15392343251&s=nwk/bfdbhqfsadfewe8ptjasvhs="; 路径=/;httponly内容类型:application/json传输编码:chunked服务器:jetty(7.6.0.v20127)
我意识到在我对kerberos身份验证的基本理解上有一个缺口,我正尝试带着它来做一个速成课程,但我真的只需要能够连接到这个api。非常感谢您的帮助。

ifsvaxew

ifsvaxew1#

您需要提供一个 HTTPSKerberosAuth 而不是类本身,因此您的请求应该是:

r = requests.get("https://apiServer.com", auth=HTTPSKerberosAuth())

请注意中的括号 HTTPSKerberosAuth() .

相关问题