身份验证

本文档讨论了对请求使用各种身份验证。

许多web服务需要身份验证,并且有许多不同的类型。下面,我们概述了请求中可用的各种形式的身份验证从简单到复杂。

基本身份验证

许多需要身份验证的web服务都接受HTTP Basic Auth。这是最简单的类型,Requests直接支持它。

使用HTTP Basic Auth发出请求非常简单:

>>> 请求授权 进口 HTTP基本认证
>>>基本的 = HTTP基本认证(“用户”, “通过”)
>>>请求.得到('https://httpbin.org/basic-auth/user/pass', 授权=基本的)
<回复[200]>

事实上,HTTP Basic Auth非常常见,因此Requests提供了一个方便的速记用于使用:

>>>请求.得到('https://httpbin.org/basic-auth/user/pass', 授权=(“用户”, “通过”))
<回复[200]>

在这样的元组中提供凭据与HTTP基本认证上面的例子。

netrc身份验证

如果没有使用授权参数,请求将尝试从用户的netrc文件。netrc文件覆盖原始HTTP身份验证标头设置标题=.

如果找到主机名的凭据,则使用HTTP Basic发送请求授权。

摘要式身份验证

另一种非常流行的HTTP身份验证形式是摘要式身份验证,和Requests也支持开箱即用:

>>> 请求授权 进口 HTTPDigest授权
>>>网址 = 'https://httpbin.org/digest-auth/auth/user/pass'
>>>请求.得到(网址, 授权=HTTPDigest授权(“用户”, “通过”))
<回复[200]>

OAuth 1身份验证

OAuth是几种web API的常见身份验证形式。这个请求-oauthlib库允许Requests用户轻松发出OAuth 1身份验证请求:

>>>进口 请求
>>> 请求_oauthlib 进口 OAuth1(OAuth1)

>>>网址 = 'https://api.twitter.com/1.1/account/verify_credentials.json'
>>>授权 = OAuth1(OAuth1)(“您的APP_KEY”, '您的应用程序设置',
...              '用户_授权_确定', 'USER_OAUTH_TOKEN_SECRET')

>>>请求.得到(网址, 授权=授权)
<回复[200]>

有关OAuth流如何工作的更多信息,请参阅官方OAuth(OAuth)网站。有关oauthlib请求的示例和文档,请参阅请求_oauthlibGitHub上的存储库

OAuth 2和OpenID Connect身份验证

这个请求-oauthlib库还处理OAuth 2,即身份验证机制支持OpenID Connect。请参阅requests-oauthlib OAuth2文档对于各种OAuth 2凭据管理流的详细信息:

其他身份验证

请求的设计允许其他形式的身份验证快速插入。开源社区的成员经常写身份验证处理程序,用于更复杂或不太常用的形式身份验证。请求组织包括:

如果您想使用这些形式中的任何一种身份验证,请直接访问它们GitHub页面并按照说明进行操作。

新的身份验证形式

如果您找不到身份验证形式的良好实现想要的话,你可以自己实现。请求可以轻松添加您自己的请求身份验证的形式。

为此,子类身份验证库并实施__调用__()方法:

>>>进口 请求
>>> 我的授权(请求.授权.身份验证库):
...    定义 __呼叫__(自己, 第页):
...        #实现我的身份验证
...        返回 第页
...
>>>网址 = 'https://httpbin.org/get'
>>>请求.得到(网址, 授权=我的授权())
<回复[200]>

当身份验证处理程序附加到请求时,它在请求设置期间调用。这个__呼叫__因此方法必须这样做使身份验证有效所需的任何内容身份验证还将添加挂钩以提供进一步的功能。

更多示例可以在请求组织和在授权.py文件。