安全¶
有很多方法可以处理安全、身份验证和授权。
通常,这是一个复杂且“困难”的主题。
在许多框架和系统中,仅仅处理安全和身份验证就需要大量的努力和代码(在很多情况下,它可以占所有编写的代码的 50% 或更多)。
**FastAPI** 提供了几种工具来帮助您轻松、快速、以标准方式处理**安全**问题,无需学习所有安全规范。
但首先,让我们检查一些小概念。
赶时间?¶
如果您不关心这些术语,并且只需要立即添加基于用户名和密码的身份验证安全,请跳过下一章。
OAuth2¶
OAuth2 是一种规范,它定义了几种处理身份验证和授权的方式。
这是一个相当广泛的规范,涵盖了几个复杂的用例。
它包括使用“第三方”进行身份验证的方法。
这就是所有使用“使用 Facebook、Google、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
:一个带有Bearer
加上一个令牌的Authorization
标头的值。这是从 OAuth2 继承来的。- HTTP 基本身份验证。
- HTTP Digest 等。
oauth2
:所有 OAuth2 处理安全的方式(称为“流程”)。- 其中几个流程适合构建 OAuth 2.0 身份验证提供者(如 Google、Facebook、Twitter、GitHub 等)
隐式
clientCredentials
授权码
- 但有一个特定的“流程”可以完美地用于直接在同一个应用程序中处理身份验证
password
:接下来的几章将涵盖此流程的示例。
- 其中几个流程适合构建 OAuth 2.0 身份验证提供者(如 Google、Facebook、Twitter、GitHub 等)
openIdConnect
:有一种方法可以定义如何自动发现 OAuth2 身份验证数据。- 此自动发现是在 OpenID Connect 规范中定义的。
提示
集成其他身份验证/授权提供者,如 Google、Facebook、Twitter、GitHub 等,也是可能的,而且相对容易。
构建身份验证/授权提供程序是最复杂的问题之一,但FastAPI 提供了简化操作的工具,并为您完成繁重的工作。
FastAPI 工具¶
FastAPI 在 fastapi.security
模块中为每种安全方案提供了多种工具,简化了使用这些安全机制的操作。
在接下来的章节中,您将看到如何使用FastAPI提供的这些工具,为您的 API 添加安全性。
您还将看到它如何自动集成到交互式文档系统中。