在构建现代化的 Web 应用程序时,用户身份验证和授权是不可或缺的组成部分。FastAPI 提供了多种方法来实现鉴权,以确保只有授权用户可以访问特定的资源或执行特定的操作。本文将介绍 FastAPI 中的鉴权方法,包括基本概念、实践案例和一些提示和技巧。
在开始讨论具体的鉴权方法之前,让我们先了解一些基本概念:
1.认证(Authentication) :认证是确定用户身份的过程。通常,用户需要提供凭证(例如用户名和密码)来进行认证。
2.授权(Authorization) :授权是确定用户是否有权限执行特定操作或访问特定资源的过程。一旦用户成功认证,授权规则将确定他们可以执行的操作。
3.Token:Token 是一种代表用户身份的令牌。通常,用户在成功登录后会获得一个 Token,然后在每个后续请求中将其包含在头部或请求参数中。
4.Middleware:中间件是在处理请求之前或之后执行的代码段,可用于添加额外的处理逻辑,包括鉴权。
基本 HTTP 认证是最简单的鉴权方式之一,它要求用户提供用户名和密码。FastAPI 可以使用 Python 的base64
模块来解码 HTTP 头中的用户名和密码。
OAuth2.0 是一种更复杂的鉴权方法,允许用户通过第三方服务进行鉴权。FastAPI 提供了OAuth2PasswordBearer
、OAuth2PasswordRequestForm
等工具来简化 OAuth2.0 的实现。
如果需要更高度定制的鉴权逻辑,可以编写自定义的鉴权中间件。这允许你完全控制鉴权过程,并在每个请求之前进行处理。
为了演示鉴权方法,下面创建一个基于 FastAPI 的简单 API,其中包括两个路由:一个公开的路由和一个需要鉴权的路由。我们将使用基本 HTTP 认证作为鉴权方法,并为每个路由添加详细的注释。首先,确保已经安装了 FastAPI 和 uvicorn:
现在,我们来创建一个名为 main.py
的文件,包含以下内容:
在上述代码中,我们创建了一个 FastAPI 应用,包含两个路由。public_data
路由是公开的,不需要鉴权。而 secure_data
路由使用基本 HTTP 认证来进行鉴权。要运行这个示例,可以使用以下命令:
现在,你可以在浏览器或 API 客户端中访问 http://localhost:8000/secure-data/
来测试需要鉴权的路由,并提供正确的用户名和密码。同时,也可以访问 http://localhost:8000/
来测试公开的路由,无需鉴权。
可以使用接口工具 Apifox 来调试,Apifox = Postman + Swagger + Mock + JMeter,Apifox 支持调试 Dubbo、http(s)、WebSocket、Socket、gRPC 等协议的接口,并且集成了 IDEA 插件。在写完服务接口时,测试阶段可以通过 Apifox 来校验接口的正确性,图形化界面极大的方便了项目的上线效率。
如果想快速的调试一条接口,新建一个项目后,在项目中选择 “调试模式” ,填写请求地址后即可快速发送请求,并获得响应结果,上文的实践案例如图所示:
FastAPI 提供了多种灵活的鉴权方法,使你能够选择最适合你的应用程序需求的方式。从基本 HTTP 认证到 OAuth2.0 和自定义鉴权中间件,FastAPI 为构建安全的 Web 应用程序提供了强大的工具和支持。
参考链接: