跳转到主要内容

Twisted的treq的Kerberos身份验证

项目描述

Kerberos身份验证与Twisted的treq

https://travis-ci.org/ktdreyer/treq-kerberos.svg?branch=master https://badge.fury.io/py/treq-kerberos.svg

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 (5.8 kB 查看散列)

上传时间 源代码

由以下支持