如何在Windows上连接到Python中的kerberos认证REST服务

2024-09-29 02:27:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试创建一个非常简单的Python脚本来下载公司内部服务的内容,该服务位于我们的防火墙内,并使用kerberos进行身份验证

当我安装requests_kerberos模块时,在安装了kerberos_sspi模块之后,我首先编辑了其中的import kerberos以使用import kerberos_sspi as kerberos

因此,我有以下Python脚本

import requests
from requests_kerberos import HTTPKerberosAuth

response = requests.get('http://service.internaldomain',auth=HTTPKerberosAuth())

print response

在尝试处理401时,它会因错误而崩溃

error: (-2146893053, 'InitializeSecurityContext', 'The specified target is unknown or unreachable')

在查看是否可以使用curl执行此操作时,我运行了kinit,并注意到它在以下提示下向我请求授权密码:

Password for username@additionalInternalDomain.internaldomain

因此,我想知道这是否是导致问题的原因


Tags: 模块import脚本身份验证编辑内容responseas
3条回答

服务器向您发出401质询,客户端(通常是浏览器,甚至是curl)在随后的调用中提供凭据。如果您已经登录到您的域-请尝试强制进行先发制人的跳转,即您将在通话中携带Kerberos票证,并且服务器不会向您发出401质询:

kerberos_auth = HTTPKerberosAuth(force_preemptive=True) r = requests.get("http://myhost/DXAPIGraphQL/api/graphql", auth=kerberos_auth)

如果上述情况无助于调查: 主体和主机名_重写HTTPKerberosAuth类的参数

我在python上尝试了多个库,但在尝试从windows计算机进行身份验证时失败了。Kerberos库主要在Linux上工作。Windows的解决方案不起作用。那么解决这个问题的办法是什么呢。 好在罗马期间要成为罗马人。尝试使用Python中的windows本机库

 import sys
 import clr
 from System.Net.Http import *
 myClienthandler = HttpClientHandler()
 myClienthandler.UseDefaultCredentials = True
 myClient = HttpClient(myClienthandler)
 x = myClient.GetStringAsync("putyourURLwithinthequoteshere")
 myresult = x.Result
 print(myresult)

请注意,此python脚本必须由有权访问您试图访问的URL的用户运行。通过将UseDefaultCredentials属性设置为True,您正在传递登录用户的Kerberos票证

我必须连接到一个RESTAPI,而这个API现在正处于keberized环境中

在读了一些书之后,我得出了以下结论(它奏效了):

    tk = 'long_kerberos_token'
    headers = {'Authorization': 'Negotiate' + tk}
    r = requests.get(url=PING_URL, headers=headers)

相关问题 更多 >