DRF使用simple JWT身份验证的实现

1. 什么是DRF?

Django REST framework (DRF) 是 Django 的开源 Web 框架,它是一个强大而灵活的工具,用于构建 Web APIs,可以让我们快速高效地构建出 RESTful API。DRF 使我们可以使用 Django 内置的强大功能,同时也提供了许多额外的工具,比如用于权限控制或者序列化的可复用视图。DRF 为我们的 API 提供了一系列的工具和可扩展性,使得 API 开发变得非常的现代和用户友好。

2. 什么是JWT?

JSON Web Tokens (JWT) 是一种用于 Web 客户端和服务器之间传输安全信息的开放标准。JWT 主要被用来在网络应用之间传递身份信息。这个标准定义了一种简洁的、自包含的方法,用于通信双方之间以 JSON 对象的形式安全地传递信息。JWT 在传输过程中是经过签名的,所以可以验证数据的完整性和真实性。

3. 使用simple JWT进行身份验证的实现

DRF 中可以使用较多的身份验证方式,如 Token 认证,Session 认证和基于 HTTP 基本认证。除此之外,我们也可以使用 JWT 进行身份验证。

3.1 安装simple JWT

安装simple JWT非常简单,可以运行以下命令:

pip install djangorestframework_simplejwt

安装完成后,在 Django 项目的 settings.py 中进行配置,将 JWT 后端添加到设置的 INSTALLED_APPS 中:

INSTALLED_APPS = [

...

'rest_framework',

'rest_framework_simplejwt',

]

3.2 在DRF的认证中使用simple JWT

对于需要进行身份认证的视图,我们需要在认证类中指定使用 JWT 身份验证。在对应视图的 permissions_classes 中添加如下内容:

from rest_framework_simplejwt.authentication import JWTAuthentication

class MyView(APIView):

authentication_classes = [JWTAuthentication]

permission_classes = [IsAuthenticated]

...

这样,我们就可以在 DRF 视图中使用 JWT 进行身份认证了。

3.3 JWT的生成和验证

生成 JWT 的方法是:

from rest_framework_simplejwt.tokens import AccessToken, RefreshToken

from datetime import timedelta

def generate_token(user):

access_token_expires = timedelta(minutes=5)

refresh_token_expires = timedelta(days=1)

access_token = AccessToken.for_user(user)

access_token['exp'] = int((access_token.current_time + access_token_expires).timestamp())

refresh_token = RefreshToken.for_user(user)

refresh_token['exp'] = int((refresh_token.current_time + refresh_token_expires).timestamp())

return {'access_token': str(access_token), 'refresh_token': str(refresh_token)}

这里的for_user方法为用户生成一个 token,我们可以在 token 字典中设置过期时间,这个过期时间默认是 5 分钟。

验证 JWT 的方法是:

from rest_framework_simplejwt.exceptions import InvalidToken, TokenError

from rest_framework_simplejwt.authentication import JWTAuthentication

def jwt_decode_handler(token):

try:

return JWTAuthentication.get_validated_token(token)

except TokenError as e:

raise InvalidToken(str(e))

def validate_token(token):

try:

decoded_token = jwt_decode_handler(token)

return decoded_token

except Exception:

return None

这里的两个方法为自定义的方法,jwt_decode_handler用来解码一个已生成的 token,返回解码后的 token 对象,validate_token用来验证一个客户端传来的 token 是否合法。

4. 总结

在DRF中,我们可以使用 simple JWT 身份验证。 simple JWT 是一种便捷且高效的身份验证手段,能够简便地对 JWT 进行生成、颁发、验证、刷新等操作。在使用simple JWT时,可以使用 Configuration 面板的各种选项和默认设置,也可以对生成和验证方法进行自定义。这些特点使得 simple JWT 成为了 DRF 中理想的身份验证方式。

后端开发标签