跳到内容

安全

处理安全、认证和授权有许多方法。

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

在许多框架和系统中,仅处理安全和认证就需要大量的工作和代码(在很多情况下,这可能占所有代码的 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 有定义多种安全“方案”的方法。

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

OpenAPI 定义了以下安全方案:

  • apiKey:一个应用程序特定的密钥,可以来自
    • 查询参数。
    • 头部。
    • cookie。
  • http:标准的 HTTP 身份验证系统,包括
    • bearer:一个头部 Authorization,值为 Bearer 加上一个令牌。这继承自 OAuth2。
    • HTTP Basic 身份验证。
    • HTTP Digest 等。
  • 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 添加安全性。

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