Python中的API认证

2025年1月5日 | 阅读 5 分钟

什么是认证?

认证是验证用户身份的过程。我们可以使用唯一的用户名和密码来认证用户。只有授权人员才能通过使用唯一的用户名和密码访问数据。认证可以通过授权头的数据或服务器提供的自定义头来提供。

我们可以使用 Python 提供的不同库来提供认证。Python 提供了一个名为 Requests 的库,用于认证 API。

关于 Requests 库

Python 中的 Requests 库用于向 URL 发送 HTTP 请求。它返回一个响应对象,该对象提供网页的详细信息和数据。该库有用于 API 认证的各种方法。以下是一些用于 API 认证的方法:

  1. 使用 Requests 库的 HTTPBasicAuth 方法进行基本认证。
  2. 使用 Requests 库的 HTTPDigestAuth 方法。
  3. 使用授权令牌作为凭据。
  4. 使用 OAuth1 方法进行认证。
  5. 使用 OAuth2 和 OpenID 方法。
  6. 使用 AuthBase 类进行自定义认证。

在实施之前,我们需要使用 pip 命令在 Python 中下载 requests 库

安装后,我们将导入 requests 库

现在,我们将使用 Python 中的 requests 库查看认证 API 的不同方法

1. 使用 HTTPBasicAuth 方法进行基本认证

基本认证可以描述为提供唯一的用户名和密码来认证请求。这可以通过 requests 库提供的 HTTPBasicAuth 类来完成。

让我们实现 HTTPBasic 方法来认证 API

输出

<Response [200]>

我们从 requests.auth 模块导入了 HTTPBasicAuth 方法。然后,使用 request.get() 函数,我们调用了一个 URL,并通过 auth 参数,我们使用用户和密码声明了 HTTPBasicAuth 类。这可以通过替换为您自己的用户名和密码来更改。作为输出,它返回响应对象。如果响应对象是 200,则表示它为用户提供了认证;如果它是 401,则表示它拒绝了请求。

2. 使用 HTTPDigestAuth 方法进行摘要认证

摘要认证是一种不需要通过密码的认证类型。Request 库也支持摘要认证。该库提供了 HTTPDigestAuth 类来实现摘要认证。

在此,我们将从 request.auth 模块使用 HTTPDigestAuth 类。然后,我们将用户名和密码传递给对象以进行摘要认证。

输出

<Response [401]>

我们请求授权一个 API,并被提供了一个用户名和密码。作为输出,它返回 401 响应,这意味着由于错误的用户名和密码,它拒绝了该 URL。

3. 使用授权令牌作为凭据

此方法提供令牌而不是凭据来进行 API 授权。Python 中的 requests 库可以帮助处理此类 API。提供的令牌可以嵌入到请求的标头中。

可以这样实现:

输出

<Response [200]>

我们使用了 requests 库来认证 API。我们已将令牌声明为具有用户名和密码,这些用户名和密码在标头参数中传递。它返回 200 响应,因为它认证了 API 并向用户授予了访问权限。

4. 使用 OAuth1 方法进行认证

OAuth1 方法是在使用 Web API 时一种非常常见的认证类型。OAuth1 提供客户端密钥、客户端密钥、资源密钥和资源密钥。OAuth1 类是 requests-oauthlib 库的子模块。要实现这种类型的认证,我们需要安装 requests-oauthlib 模块。

可以使用 pip 命令安装 requests-oauthlib 模块

OAuth1 语法

现在,我们将对此方法在 API 上进行尝试以获得认证

输出

<Response [401]>

我们从 requests_oauthlib 模块导入了 OAuth1 库。然后,我们创建了一个对象并使用必需的参数调用了 OAuth1。然后,使用 request.get() 函数,我们尝试获取 URL 的认证。作为输出,它返回 401 响应,因为它拒绝了访问。

由于 OAuth1 的效率和可靠性不高,因此在 2012 年引入了另一个名为 OAuth2 的协议,该协议更可靠、更健壮。

5. 使用 OAuth2 和 OpenID 方法

OAuth2 方法也使用访问令牌。令牌是 JSON 格式的一些数据,允许用户认证任何站点或 API。使用的令牌具有到期日期和时间,这有助于使其更安全并防止任何中间干预。

可以使用 requests 库实现 OAuth2 方法。requests 库提供了 requests-oauthlib 模块来实现 OAuth2。在实施之前,我们需要导入 OAuth2 库。

6. Requests 库中的自定义认证

我们可以通过提供一个通用结构(通过子类)来创建我们自己的 API 认证。requests 库在 requests.auth 模块下提供了 AuthBase 类,我们可以通过它来创建自己的认证形式。我们可以从 AuthBase 类继承认证类。

在实施自定义认证之前,我们需要导入 AuthBase 类

在 Python 中实现自定义认证

输出

<Response [401]>

我们导入了所需的库,然后创建了一个类并继承了 AuthBase 类。在此自定义类中,我们调用了一个内置函数 __call__,它返回对象。然后,定义了一个 URL 并在 requests.get() 函数中将其作为 auth 参数调用自定义()类。