Django REST框架中处理JWT令牌的认证的源码解析
- 作者: 五速梦信息网
- 时间: 2026年04月20日 04:36
`。
- 提取令牌:`get_raw_token`从头部字符串中提取纯令牌内容。
- 验证令牌:`get_validated_token`解析并验证令牌,检查签名是否有效,令牌是否过期等。若令牌无效,抛出`InvalidToken`异常。
- 获取用户:`get_user`根据令牌中的用户标识从数据库中获取对应的用户实例,若用户不存在则抛出异常。
- 令牌验证方法
get_validated_token:
”`csharp
def get_validated_token(self, raw_token):
"""
Validates the raw token and returns the validated token payload.
"""
try:
api_settings.USER_ID_FIELD,
return api_settings.JWTPAYLOADVALIDATOR(
raw_token, self.get_key_callback()
)(raw_token)
except Exception as e:
raise exceptions.InvalidToken(str(e))
```
- 解析与验证:使用
JWTPAYLOADVALIDATOR解析令牌内容,并通过get_key_callback获取公钥或密钥,验证令牌的签名。- 异常处理:捕获解析和验证过程中发生的任何异常,重新抛出
InvalidToken异常,提供详细的错误信息。
- 异常处理:捕获解析和验证过程中发生的任何异常,重新抛出
- 用户获取方法
get_user:
”`csharp
def get_user(self, validated_token):
"""
Attempts to find the user associated with the given validated token.
"""
user_id = validated_token[api_settings.USER_ID_FIELD]
user = None
if api_settings.USER_ID_FIELD in validated_token:
user = self.user_model.objects.filter(
**{api_settings.USER_ID_FIELD: user_id}
).first()
if not user:
raise exceptions.AuthenticationFailed.detail="User not found"
return user
```
- 用户查询:从令牌中提取用户标识,通过
USER_ID_FIELD字段查询数据库,获取对应的用户。- 用户不存在:如用户不存在或查询结果为空,抛出
AuthenticationFailed异常,提示用户不存在。
- 用户不存在:如用户不存在或查询结果为空,抛出
- 令牌黑名单检查:
”`csharp def get_key_callback(self):
def get_key Gaut Lola):
if not api_settings.BLACKLISTafter_rotation:
return None
# Return a public key And kid引用
return validated_token
return get_key
```
- 令牌撤销:当启用黑名单功能时,检查令牌是否已被撤销。通过
BLACKLIST_AFTER_ROTATION配置项确定是否启用黑名单。- 公钥获取:返回用于验证签名的公钥,以及Key ID(kid),确保使用正确的密钥验证令牌签名。
- 异常处理:
”`csharp
def get_invalid_token_error(self, raw_token):
try:
validated_token = self.get_validated_token(raw_token)
except exceptions.InvalidToken as e:
raise e
```
”`csharp
异常捕获:在解析和验证过程中捕获所有InvalidToken异常,确保错误信息被正确传递和处理。
```
总结
JWTAuthentication类是Django REST框架中处理JWT令牌认证的核心类。它通过从请求中提取、验证JWT令牌,并查询相关用户来完成认证流程。关键功能包括:
- 令牌提取与解析:从请求头中获取JWT令牌,解析并验证其内容和结构。
- 用户获取:根据令牌中的用户标识,从数据库中获取对应的用户实例。
- 异常处理:在令牌无效、用户不存在等情况下抛出相应的异常,确保错误信息被正确返回。
- 黑名单检查:支持令牌撤销功能,防止已注销的令牌被使用。
通过理解
JWTAuthentication的实现,开发者可以更好地利用JWT进行身份验证,并根据需求扩展其功能。
相关文章
-
DIY.JS 开发文档, 一款专用于DIY定制的Canvas图形库
DIY.JS 开发文档, 一款专用于DIY定制的Canvas图形库
- 互联网
- 2026年04月20日
-
dify升级中PostgreSQL数据库字段更新处理
dify升级中PostgreSQL数据库字段更新处理
- 互联网
- 2026年04月20日
-
Dify开发必备:8个官方文档未提及的关键技巧
Dify开发必备:8个官方文档未提及的关键技巧
- 互联网
- 2026年04月20日
-
DNA彻底水解产物是什么(dna彻底水解后的产物是什么)
DNA彻底水解产物是什么(dna彻底水解后的产物是什么)
- 互联网
- 2026年04月20日
-
dnf怎么找回装备(dnf找回装备需要什么材料)
dnf怎么找回装备(dnf找回装备需要什么材料)
- 互联网
- 2026年04月20日
-
Docker Dockerfile如何编写?Docker Composer该如何使用?
Docker Dockerfile如何编写?Docker Composer该如何使用?
- 互联网
- 2026年04月20日





