twisted的treq的kerberos身份验证
treq-kerberos的Python项目详细描述
使用twisted的treq进行kerberos身份验证
treq kerberos为treq添加kerberos(spnego/http协商)身份验证。
treq是一个类似于 使用twisted框架异步(非阻塞)发出http请求。
treq kerberos的灵感来自requests-kerberos。
简单示例:发出请求
获取需要kerberos身份验证的url:
fromtreq_kerberosimportTreqKerberosAuthimporttreq_kerberosfromtwisted.internetimportdefer,reactor@defer.inlineCallbacksdefexample():url='https://errata.devel.redhat.com/'auth=TreqKerberosAuth()try:response=yieldtreq_kerberos.get(url,auth=auth)content=yieldresponse.content()print(content)exceptExceptionase:print(e)if__name__=='__main__':example().addCallback(lambdaign:reactor.stop())reactor.run()
(请参阅examples/get.py处的完整脚本)
其他http方法
treq kerberos实现了与treq相同的基本api,因此可以调用 每个http动词的方法:
@defer.inlineCallbacksdefexample():url='https://example.com/'auth=TreqKerberosAuth()data={'my':'parameter'}# HTTP GETresponse=yieldtreq_kerberos.get(url,auth=auth)# HTTP PUTresponse=yieldtreq_kerberos.put(url,data=data,auth=auth)# HTTP POSTresponse=yieldtreq_kerberos.post(url,data=data,auth=auth)# HTTP PATCHresponse=yieldtreq_kerberos.patch(url,data=data,auth=auth)# HTTP HEAD (note that content() will always be blank)response=yieldtreq_kerberos.head(url,auth=auth)# HTTP DELETEresponse=yieldtreq_kerberos.delete(url,auth=auth)
或者,您也可以调用常规的request()方法:
# HTTP GETresponse=yieldtreq_kerberos.request('GET',url,auth=auth)
抢先认证
通常,Web客户端只在 从web服务器接收http401响应。然后客户端重试 使用正确的Authentication: Negotiate ...头。
如果您知道您的web服务器将始终提示http协商 身份验证,您可以通过设置 force_preemptive=True实例化时的关键字参数 TreqKerberosAuth。(此行为与请求kerberos的 force_preemptivekwarg用于HTTPKerberosAuth。
@defer.inlineCallbacksdefexample():url='https://errata.devel.redhat.com/'auth=TreqKerberosAuth(force_preemptive=True)response=yieldtreq_kerberos.get(url,auth=auth)# ...
与上游TREQ集成
在编写本文时,treq通过传递 通过authkwarg的(username, password)元组。
这个模块借用了相同的auth概念。你通过一个 TreqNegotiateAuth对象,而不是用户名和密码元组。
<>最后,TeRQ可以允许更灵活的认证设计。 适合第三方。当这个在treq上游可用时,我想要 treq kerberos模块来支持它,理想情况下最小化对 支持这种未来的过渡。待办事项:
- 重写以使用python gssapi而不是python kerberos(类似于 requests-gssapi)。