随笔 - 18  文章 - 3 评论 - 0 阅读 - 974
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

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
复制代码

 

posted on   阿勒泰的鱼  阅读(27)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示