跳到内容

安全性

处理安全性、身份验证和授权的方法有很多种。

这通常是一个复杂且“困难”的话题。

在许多框架和系统中,仅处理安全性和身份验证就需要投入大量的精力和代码(在许多情况下,这可能占到所有编写代码的 50% 以上)。

FastAPI 提供了多种工具,帮助您轻松、快速地以标准方式处理安全性,而无需深入研究和学习所有的安全规范。

但首先,让我们先了解一些基础概念。

赶时间?

如果您不关心这些术语,只想现在添加基于用户名和密码的身份验证安全性,请直接跳转到后续章节。

OAuth2

OAuth2 是一项定义了多种身份验证和授权处理方式的规范。

它是一项相当广泛的规范,涵盖了多种复杂的应用场景。

它包含使用“第三方”进行身份验证的方法。

这就是所有带有“使用 Facebook、Google、X (Twitter)、GitHub 登录”功能的系统底层所使用的技术。

OAuth 1

曾经有过 OAuth 1,它与 OAuth2 非常不同且更加复杂,因为它包含了关于如何加密通信的直接规范。

它在今天并不太流行或常用。

OAuth2 没有规定如何加密通信,它期望您的应用程序通过 HTTPS 提供服务。

提示

部署章节中,您将看到如何使用 Traefik 和 Let's Encrypt 免费设置 HTTPS。

OpenID Connect

OpenID Connect 是另一个基于 OAuth2 的规范。

它只是扩展了 OAuth2,对 OAuth2 中一些相对模糊的内容进行了明确,旨在使其更具互操作性。

例如,Google 登录使用 OpenID Connect(底层使用 OAuth2)。

但 Facebook 登录不支持 OpenID Connect。它有自己的一种 OAuth2 变体。

OpenID(非“OpenID Connect”)

曾经还有一个“OpenID”规范。它试图解决与 OpenID Connect 相同的问题,但它并非基于 OAuth2。

因此,它是一个完全独立的附加系统。

它在今天并不太流行或常用。

OpenAPI

OpenAPI(以前称为 Swagger)是构建 API 的开放规范(现属于 Linux 基金会)。

FastAPI 基于 OpenAPI

这使得拥有多种自动交互式文档界面、代码生成等成为可能。

OpenAPI 提供了一种定义多种安全“方案”(schemes)的方法。

通过使用它们,您可以利用所有这些基于标准的工具,包括这些交互式文档系统。

OpenAPI 定义了以下安全方案

  • apiKey:特定于应用程序的密钥,可以来自
    • 查询参数。
    • 请求头。
    • Cookie。
  • http:标准的 HTTP 身份验证系统,包括
    • bearer:一个 Authorization 请求头,其值为 Bearer 加上令牌。这是从 OAuth2 继承而来的。
    • HTTP 基本身份验证。
    • HTTP Digest 等。
  • oauth2:处理安全性的所有 OAuth2 方式(称为“流程”)。
    • 其中一些流程适用于构建 OAuth 2.0 身份验证提供商(如 Google、Facebook、X (Twitter)、GitHub 等)
      • implicit
      • clientCredentials
      • authorizationCode
    • 但有一种特定的“流程”可以完美地用于直接在同一应用程序中处理身份验证
      • password:后续章节将涵盖此示例。
  • openIdConnect:有一种定义如何自动发现 OAuth2 身份验证数据的方法。
    • 这种自动发现正是 OpenID Connect 规范中所定义的。

提示

集成 Google、Facebook、X (Twitter)、GitHub 等其他身份验证/授权提供商也是可能的,且相对容易。

最复杂的问题是构建像上述那样的身份验证/授权提供商,但 FastAPI 为您提供了轻松实现这一点的工具,并为您完成了大部分繁重的工作。

FastAPI 工具

FastAPI 在 fastapi.security 模块中为每种安全方案提供了多种工具,简化了这些安全机制的使用。

在接下来的章节中,您将看到如何使用 FastAPI 提供的这些工具为您的 API 添加安全性。

您还将看到它是如何自动集成到交互式文档系统中的。