使用JWT 登录认证和RBAC 权限控制
在开发 Web API 应用时, 安全问题是非常核心的考虑因素。在众多安全问题中, 身份认证(Authentication)与 授权(Authorization)是首要的问题,本节我们就在FastAPI中提供一个基于JWT和RBAC的登录认证及权限控制的实现方式。
1、身份认证(Authentication)与JWT
身份认证(Authentication)的方式
在Web应用中,身份认证主要为了确保用户是谁,在目前常见的认证方式包括:
| 认证方式 | 描述 |
|---|---|
| Session + Cookie | 服务端维护登录状态(Session),前端用 Cookie 自动带上 Session ID |
| JWT(JSON Web Token) | 无状态认证,服务端不存储登录状态,Token 中携带用户信息,前端存储于 localStorage 或 Cookie |
| OAuth 2.0 | 用于授权第三方访问用户数据(如 GitHub 登录) |
| API Key | 简单方式,客户端发送固定密钥,适合低安全场景 |
| SAML/OpenID | 企业级单点登录协议,较复杂 |
JWT(JSON Web Token)的实现原理
在上述Web应用认证方式中,JWT实现较为简单,且对前后端分离的开发模式比较友好,应用较为广泛,其原理可以总结为以下几个核心步骤:
1. Token 结构
JWT 由三部分组成,通过 . 分隔,如header.payload.signature。
- header:声明签名算法,如 HS256。
- payload:实际数据(如用户ID、权限、过期时间等)。
- signature:用密钥对 header 和 payload 进行签名,防止篡改。
2. 签发(生成)过程
服务器在用户登录成功后:
- 构造 header 与 payload;
- 使用密钥和算法生成 signature;
- 拼接三个部分生成最终 Token;
- 将 Token 返回给前端。
3. 验证过程
当客户端带着 Token 访问受保护接口时:
- 服务器解析 Token,读取并验证 signature;
- 检查 exp 是否过期;
- 若验证通过,提取 payload 中的信息用于身份识别和权限判断。
JWT认证过程时序图

886

被折叠的 条评论
为什么被折叠?



