目次
在前后端分离的项目中,前后端举行身份验证通常用JWT来举行,JWT 提供了一个抱负的认证解决方案,用来保护 RESTful API,确保只有颠末认证的用户才气访问受保护的资源。基于前端框架(如React, Angular, Vue.js)的单页面应用 (SPA),开发者通过利用 JWT可以获得一种简单、安全、高效的方式来处理用户认证和授权的问题。本文通过django项目的实战来阐明怎样应用和利用JWT。 一、什么是JWTJWT(JSON Web Token)是一种开放标准(RFC 7519),用于在网络各方之间以安全且紧凑的形式传输信息。JWT 是一个小型的凭据,通常用于身份验证和授权场景。JWT 由三部门组成:头部 (Header)、负载 (Payload) 和署名 (Signature)。 一个典型的JWT如下所示: [code]eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ0b2tlbl90eXBlIjoiYWNjZXNzIiwiZXhwIjoxNzI2OTcyMDc2LCJpYXQiOjE3MjY5NzAyNzYsImp0aSI6IjMyMTFiZjdmZDlhZTRmNTBhMDNmOGM2NjcwNDM2NjFiIiwidXNlcl9pZCI6Mn0.Ej6US4Uk-sSNm9P8kTU_cDAzBpO4I-BLhPstp5sG00Q[/code]
二、为什么利用JWT利用 JWT 的缘故原由重要有以下几点:
总的来说,JWT 提供了一种高效、安全的方式来处理用户认证和授权,尤其是在需要跨域操作或构建无状态服务的环境下。 三、在django项目中怎样应用JWTJWT(JSON Web Token)是一种用于在网络应用中安全地传输信息的令牌。它通常用于身份验证和授权,特殊是在单页应用(SPA)和API服务中。在Django中应用JWT,可以利用 djangorestframework-simplejwt。 1、安装djangorestframework-simplejwt库:[code]pip install djangorestframework-simplejwt[/code]2、在settings.py中配置JWT认证:在INSTALLED_APPS中添加rest_framework_simplejwt的应用 [code]INSTALLED_APPS = [ 'blog', 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'rest_framework', 'rest_framework_simplejwt', # 添加 simplejwt 应用 'django_filters', # 注册条件查询 'mdeditor', # 注册markdown的应用 'drf_yasg2', # 接口文档 ][/code]添加REST_FRAMEWORK的默认认证类为JWT认证 [code]REST_FRAMEWORK = { 'DEFAULT_AUTHENTICATION_CLASSES': [ 'rest_framework_simplejwt.authentication.JWTAuthentication', ], }[/code]添加SIMPLE_JWT的干系配置 [code]# JWT 干系设置 SIMPLE_JWT = { 'ACCESS_TOKEN_LIFETIME': timedelta(minutes=30), # 访问令牌的有用时间 'REFRESH_TOKEN_LIFETIME': timedelta(days=1), # 刷新令牌的有用时间 'ROTATE_REFRESH_TOKENS': False, # 是否允许刷新令牌循环 'BLACKLIST_AFTER_ROTATION': True, # 刷新令牌后是否加入黑名单 'UPDATE_LAST_LOGIN': False, # 登录时是否更新末了登录时间 'ALGORITHM': 'HS256', # 署名算法 'SIGNING_KEY': SECRET_KEY, # 署名密钥 'VERIFYING_KEY': None, # 验证密钥 'AUDIENCE': None, # 观众 'ISSUER': None, # 发行人 'JWK_URL': None, # JWK URL 'LEEWAY': 0, # 宽限期 'AUTH_HEADER_TYPES': ('Bearer',), # 授权头范例 'AUTH_HEADER_NAME': 'HTTP_AUTHORIZATION', # 授权头名称 'USER_ID_FIELD': 'id', # 用户 ID 字段 'USER_ID_CLAIM': 'user_id', # 用户 ID 声明 'USER_AUTHENTICATION_RULE': 'rest_framework_simplejwt.authentication.default_user_authentication_rule', 'AUTH_TOKEN_CLASSES': ('rest_framework_simplejwt.tokens.AccessToken',), # 认证令牌类 'TOKEN_TYPE_CLAIM': 'token_type', # 令牌范例声明 'TOKEN_USER_CLASS': 'rest_framework_simplejwt.models.TokenUser', 'SLIDING_TOKEN_REFRESH_EXP_CLAIM': 'refresh_exp', # 滑动令牌刷新逾期声明 'SLIDING_TOKEN_LIFETIME': timedelta(minutes=5), # 滑动令牌有用时间 'SLIDING_TOKEN_REFRESH_LIFETIME': timedelta(days=1), # 滑动令牌刷新有用时间 }[/code]3、在urls.py中配置JWT的获取和刷新路由:[code]from django.urls import path from rest_framework_simplejwt.views import (TokenObtainPairView, TokenRefreshView) urlpatterns = [ path('token/', TokenObtainPairView.as_view(), name='token_obtain_pair'), path('token/refresh/', TokenRefreshView.as_view(), name='token_refresh'), # 其他路由... ][/code]4、在视图中需要认证的地方利用JWT认证如下modelviweset中利用,对于查询方法如list,retrieve不做鉴权,对于其他方法需要鉴权。 [code]def get_permissions(self): """ Instantiates and returns the list of permissions that this view requires. """ if self.action in ['list', 'retrieve']: # 对于list方法,返回AllowAny权限类,表现不需要鉴权 permission_classes = [AllowAny, ] else: # 对于其他方法,返回IsAuthenticated权限类,表现需要用户已认证 permission_classes = [IsAuthenticated, ] return [permission() for permission in permission_classes][/code]四、JWT怎样利用通过上面的应用后,利用接口调用碰到需要鉴权的会提示需要认证。 那怎样通过JWT举行认证呢? 下面通过postman来应用JWT的利用过程。 1、调用天生JWT的接口获取JWT 2、客户端保存JWT在调用接口时带上获取的JWT 至此,本文先容了什么时JWT,为什么要利用JWT,通过django实现JWT,先容了JWT的利用流程,末了以一个详细API接口实例的调用来阐明JWT怎样利用。后续将先容VUE从前端登录获取JWT到JWT认证的实例。 参考资料:http://xiejava.ishareread.com/ 到此这篇关于django应用JWT(JSON Web Token)实战教程的文章就先容到这了,更多干系django应用JWT内容请搜索脚本之家以前的文章或继续浏览下面的干系文章希望大家以后多多支持脚本之家! 来源:https://www.jb51.net/python/328815vi2.htm 免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |
|手机版|小黑屋|梦想之都-俊月星空
( 粤ICP备18056059号 )|网站地图
GMT+8, 2025-7-1 19:11 , Processed in 0.030550 second(s), 19 queries .
Powered by Mxzdjyxk! X3.5
© 2001-2025 Discuz! Team.