Twisted的treq的Kerberos身份验证
项目描述
Kerberos身份验证与Twisted的treq
treq-kerberos为treq添加了Kerberos(SPNEGO/HTTP Negotiate)身份验证。
treq 是一个类似requests的库,用于使用Twisted框架异步(非阻塞)地发送HTTP请求。
treq-kerberos受到了 requests-kerberos 的启发。
简单示例:发送请求
GET需要Kerberos身份验证的URL
from treq_kerberos import TreqKerberosAuth
import treq_kerberos
from twisted.internet import defer, reactor
@defer.inlineCallbacks
def example():
url = 'https://errata.devel.redhat.com/'
auth = TreqKerberosAuth()
try:
response = yield treq_kerberos.get(url, auth=auth)
content = yield response.content()
print(content)
except Exception as e:
print(e)
if __name__ == '__main__':
example().addCallback(lambda ign: reactor.stop())
reactor.run()
(查看完整脚本 examples/get.py.)
其他HTTP方法
treq-kerberos实现了与treq相同的API,因此您可以调用每个HTTP动词的方法
@defer.inlineCallbacks
def example():
url = 'https://example.com/'
auth = TreqKerberosAuth()
data = {'my': 'parameter'}
# HTTP GET
response = yield treq_kerberos.get(url, auth=auth)
# HTTP PUT
response = yield treq_kerberos.put(url, data=data, auth=auth)
# HTTP POST
response = yield treq_kerberos.post(url, data=data, auth=auth)
# HTTP PATCH
response = yield treq_kerberos.patch(url, data=data, auth=auth)
# HTTP HEAD (note that content() will always be blank)
response = yield treq_kerberos.head(url, auth=auth)
# HTTP DELETE
response = yield treq_kerberos.delete(url, auth=auth)
或者您也可以调用通用的 request() 方法
# HTTP GET
response = yield treq_kerberos.request('GET', url, auth=auth)
预取身份验证
通常,Web客户端仅在收到来自Web服务器的HTTP 401 响应后才会尝试HTTP Negotiate身份验证。然后客户端使用正确的 Authentication: Negotiate ... 标头重试。
如果您知道您的Web服务器将始终提示HTTP Negotiate身份验证,您可以在实例化 TreqKerberosAuth 时设置 force_preemptive=True 关键字参数来跳过第一次往返。 (此行为与request-kerberos的 force_preemptive kwarg的 HTTPKerberosAuth 相同。)
@defer.inlineCallbacks
def example():
url = 'https://errata.devel.redhat.com/'
auth = TreqKerberosAuth(force_preemptive=True)
response = yield treq_kerberos.get(url, auth=auth)
# ...
treq上游集成
在撰写本文档时,treq 通过传递一个 (用户名,密码) 元组通过 auth 关键字参数支持 HTTP 基本认证。
此模块借鉴了相同的 auth 概念。您传入一个 TreqNegotiateAuth 对象,而不是用户名和密码元组。
最终,treq 可能允许更灵活的认证设计,这可能会适合第三方。当 treq 上游可用时,我希望 treq-kerberos 模块支持它,理想情况下最小化 API 变更以支持这种未来的过渡。
待办事项
重写以使用 python-gssapi 而不是 python-kerberos(类似于 requests-gssapi)。
使用此包的软件包
项目详情
treq-kerberos-1.2.0.tar.gz 的散列
算法 | 散列摘要 | |
---|---|---|
SHA256 | ec1f38587927deaccee11f0e02c6f15229555fdd0b9267bf63da77039806cb03 |
|
MD5 | db7676a0bf2b7ff55dbbd2edfa47ea33 |
|
BLAKE2b-256 | 5fcc5946f20dad117dadf495c87424a087952b7c39b087e1b2655c548772d918 |