用于python请求的gssapi身份验证处理程序
requests-gssapi的Python项目详细描述
请求GSSAPI身份验证库
请求是一个http库,用python编写,面向人类。这个图书馆 添加可选的gssapi身份验证支持,并支持mutual 身份验证。
它提供了一个完全向后兼容的垫片 python请求kerberos库:简单地替换导入请求 使用 导入请求。更强大的接口由 httpspnegouth组件,但这当然不能保证 兼容的。下面的文档是针对新界面编写的。
基本get用法:
>>>importrequests>>>fromrequests_gssapiimportHTTPSPNEGOAuth>>>r=requests.get("http://example.org",auth=HTTPSPNEGOAuth())...
应支持整个 请求.api 。
身份验证失败
客户端身份验证失败将通过返回 401响应。
相互认证
相互身份验证是gssapi的一个名称不好的特性,它没有 为尽可能多地使用 请求。实际上,在大多数机制实现中 (包括krb5),它需要客户机和服务器之间的另一个往返 在身份验证握手期间。许多客户端和服务器不正确 处理多次往返的身份验证握手。如果你 遇到多个身份验证错误,这可能是原因。
只要你运行的是一个TLS链接,它的安全性保证了你的信任, 相互认证没有好处。如果你不信任 所有的,相互身份验证都没有帮助(因为它不是防篡改的,而且gssapi 未在身份验证后使用。在 有助于少量(例如被动对手 加密但未经验证的频道),但对于协商(我们在这里所做的), 一般来说没有帮助。
对于什么是相互认证的更技术性的解释 担保,请参阅RFC2743(GSSAPIv2)、RFC4120(GSSAPI中的KRB5)。 RFC4178(spnego)和RFC4559(http协商)。
禁用
默认情况下,不需要显式禁用相互身份验证。 但是,为了与旧版本的request-gssapi或 请求kerberos,可以显式请求不尝试:
>>>importrequests>>>fromrequests_gssapiimportHTTPSPNEGOAuth,DISABLED>>>gssapi_auth=HTTPSPNEGOAuth(mutual_authentication=DISABLED)>>>r=requests.get("https://example.org",auth=gssapi_auth)...
必需的
这是历史上的违约,但现在已经不是了。如有要求, httpspnegouth 将需要来自服务器的相互身份验证,如果 服务器发出无法验证的非错误响应, 将引发请求gssapi.errors.mutualauthenticationerror 。(见 如果服务器发出一个不能 经过身份验证后,它将返回给用户,但其内容和 标题已删除。如果响应内容比 错误时相互验证(例如,对于某些winrm调用)剥离行为 可通过设置 清除相互错误响应=false来抑制:
>>>importrequests>>>fromrequests_gssapiimportHTTPSPNEGOAuth,REQUIRED>>>gssapi_auth=HTTPSPNEGOAuth(mutual_authentication=REQUIRED,sanitize_mutual_error_response=False)>>>r=requests.get("https://windows.example.org/wsman",auth=gssapi_auth)...
可选
如果 服务器通知它支持它,如果身份验证失败 失败,但如果服务器根本不支持它,则不会。这可能不是 你想要的是:链接篡改要么会导致严重的失败,要么是无声的 因为它根本不会发生。保留它是为了兼容。
>>>importrequests>>>fromrequests_gssapiimportHTTPSPNEGOAuth,OPTIONAL>>>gssapi_auth=HTTPSPNEGOAuth(mutual_authentication=OPTIONAL)>>>r=requests.get("https://example.org",auth=gssapi_auth)...
机会身份验证
可以强制httpspnegouth预先启动gssapi 在初始请求(以及所有 随后)。默认情况下,身份验证仅在 401未经授权的 包含协商质询的响应 从接收源服务器。这可能导致相互身份验证 使用持久连接(如windows/winrm)的主机失败,如 初始身份验证握手后不会发送gssapi挑战。这个 行为可以通过设置 机会认证=真来改变
>>>importrequests>>>fromrequests_gssapiimportHTTPSPNEGOAuth,REQUIRED>>>gssapi_auth=HTTPSPNEGOAuth(mutual_authentication=REQUIRED,opportunistic_auth=True)>>>r=requests.get("https://windows.example.org/wsman",auth=gssapi_auth)...
主机名覆盖
如果与DNS名称不匹配的主机通信 主机名(例如,在内容交换机或负载平衡器后面) gssapi交换所用的主机名可以由 传入自定义名称(string或 gssapi.name ):
>>>importrequests>>>fromrequests_gssapiimportHTTPSPNEGOAuth,REQUIRED>>>gssapi_auth=HTTPSPNEGOAuth(target_name="internalhost.local")>>>r=requests.get("https://externalhost.example.org/",auth=gssapi_auth)...
显式主体
httpspnegouth 通常使用默认主体(即用户 您上次运行的是 kinit 或 kswitch ,如果 适用)。但是,如果需要,也可以使用显式凭据。
>>>importgssapi>>>importrequests>>>fromrequests_gssapiimportHTTPSPNEGOAuth,REQUIRED>>>name=gssapi.Name("user@REALM",gssapi.NameType.hostbased_service)>>>creds=gssapi.Credentials(name=name,usage="initiate")>>>gssapi_auth=HTTPSPNEGOAuth(creds=creds)>>>r=requests.get("http://example.org",auth=gssapi_auth)...
委派
请求gssapi 支持凭证委派( gss\u c\u delegu flag )。 若要将凭据委派给请求委派的服务器,请通过 委托=真
>>>importrequests>>>fromrequests_gssapiimportHTTPSPNEGOAuth>>>r=requests.get("http://example.org",auth=HTTPSPNEGOAuth(delegate=True))...
请注意,只允许委派到您信任的服务器,因为它们将能够 使用委派的凭据来模拟您。
日志记录
这个库充分利用了python的日志功能。
日志消息记录到 请求 请求gssapi.gssapi 命名记录器。
如果您有困难,我们建议您配置日志记录。与 底层gssapi库将变得显而易见。另外,大量的调试 提供的信息可能有助于排除故障 一直增加日志级别直到调试。