1. 基础
jwt json web token
原理:
1. jwt 分为三段式 head,payload,sign
2. 头和体是可逆加密,让服务器可以反解成user对象,签名是不可逆加密,保证整个token的安全性
3.head,payload,sgin三部分,店铺是采用json格式的字符串进行加密,可逆加密一般采用base64算法,不可逆加密
一般采用hash md5算法
4 头中的内容是基本信息,公司信息等
5. 体中的内容是关键信息 用户信息
6.sgin的内容是安全信息,:head的加密结果+payload加密结果+服务器不对外公开的安全码,进行md5加密
校验
1. 将token按 . 拆分成三段字符串,第一段,head 加密字符串 一般不需要处理
2. 第二段 payload加密字符串要反解出用户keyword 校验信息等
3. 再用第一段,第二段+ 服务器安全码 不可逆hash 加密,与第三段签名进行校验 通过后才能确认
第二段的用户是合法用户
drf项目的jwt认证开发流程
1.用账号密码访问接口,登录接口逻辑中调用签发token算法,得到token 返回给客户端
2.校验token的算法应该写在认证类中, 全局配置认证组件 ,都会进行认证校验,所以请求带了token,就会反解,
3. 登录接口局部禁用认证
2.基本使用
基于django的auth表实现的
1.1 得到token
from rest_framework_jwt.views import ObtainJSONWebToken,VerifyJSONWebToken
jwt 提供的视图类 urlpatterns = [ path('admin/', admin.site.urls), path('login/',ObtainJSONWebToken.as_view()) ]
post 请求携带json数据 返回token
{
"username":"dcm1",
"password": "123"
}
1.2 其他视图类内使用
from rest_framework_jwt.authentication import JSONWebTokenAuthentication
class JwtTest(GenericAPIView):
authentication_classes = [JSONWebTokenAuthentication]
def get(self,request,*args,**kwargs):
return Response('GET请求')
请求头内增加Authorization 属性 value值为JWT+空格+token
jwt项目在django内的settings
JWT_AUTH={
'JWT_EXPIRATION_DELTA': datetime.timedelta(seconds=300),
'JWT_AUTH_HEADER_PREFIX': 'JWT',
}
3. 基于jwt自己写认证
3.1 自己写的
from rest_framework_jwt.authentication import BaseAuthentication,JSONWebTokenAuthentication,jwt_decode_handler
class NewAuthToken(JSONWebTokenAuthentication):
def authenticate(self, request):
token = request.META.get('HTTP_AUTHORIZATION')
这块,postman内配的是Authorization属性,不是HTTP_AUTHORIZATION 这个属性
# 拿用户信息
payload = jwt_decode_handler(token)
print(payload)
user = self.authenticate_credentials(payload)
return user, None
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构