用于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库将变得显而易见。另外,大量的调试 提供的信息可能有助于排除故障 一直增加日志级别直到调试。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java调用Python函数作为TEID中的UDF   java Android。支持v4导入不工作   java如何影响具有静态属性的类   java如何在从glTexImage2D()分配后编辑纹理的像素颜色   javaspringboot+rediscache+@Cacheable适用于某些方法,而不适用于其他方法   java无法将动态Web模块方面从3.0更改为2.5   java如何在新选项卡中显示打印的文档?   java Google Cloud Endpoints API方法仅在删除用户参数时成功调用   java为什么我可以使用Stack<Double>但不能使用Stack<Double>?   java JDBC PreparedStatement似乎忽略了占位符   java如何设置JInternalFrame的标准图标化位置?   Java文件。copy()不复制文件   基于另一个类的java显示arraylist?   java Android Studio:错误:非法字符:'\u2028'   对象(Java)无法实例化类型映像?   javascript错误:飞行前响应的HTTP状态代码401无效   java确保泛型vararg参数具有相同的类型