JWT及使用方法:json web token

Token是无状态协议中认证用户的一种形式,不受域名限制,而JWT只是一种实现形式,通过在客户端存储payload来降低服务端压力。

TOKEN是一个宽泛的概念,翻译为令牌, 是访问资源的凭证。

JWT是json web token缩写。用点号分为三段,分别表示头、信息和签名。可以使用在RESTFUL接口定义, 也可以使用在普通的web。它将用户信息加密到token里,服务器不保存任何用户信息。服务器通过密钥验证token的正确性,判断是否通过验证。

一、定义Token

token分为三部分来定义:

1 .表头:Header是一个json对象,存储元数据

{
"alg":"HS256",
"typ":"JWT"
}
 

alg:是签名的算法名称(algorithm),默认是HMAC SHA);

type属性表示这个令牌(token)的类型(type),JWT令牌统一写成JWT。

2.负载:Payload是一个json对象。存放传递的数据,数据分为Public和Private。

{
   'id': user.id,
   'username': user.username,
   ‘exp’: time.time() + 300,  #过期时间
}

第一部分和第二部分, 可以被其他人使用base64解密,不建议存储敏感信息

3.Signature:签名。签名是对Header和Payload两部分的签名,目的是为了防止数据被篡改

temp = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZvaG4gRGdWV9"

然后使用第一部分 声明的算法HS256进行加密,得到如下:

import hmac
h = hmac.new(b'key', temp.encode(), digestmod='SHA256')
sign = base64.urlsafe_b64encode(h.digest())

签名算法:先指定一个secret密匙,把base64URL的header,base64RL的payload和secret秘匙 使用HNAC SHA256生成签名字符串。

最后把三个部分的拼成一个字符串,每个部分之间用点(.)分隔,就可以返回给用户

---------------------------------------------------------------------------------------------------------------------

pip install pyjwt 

## <1>封装一个函数方法


import jwt

from project_p6 import settings

# 生成token 函数
def generate_jwt(payload):    # 函数里传一个payload参数  

    token = jwt.encode(payload=payload, key=settings.SECRET_KEY, algorithm='HS256')

    return token

视图加入token:

class UserApi(APIView):
    def post(self, request):
            # TODO 生成token
            data_ = {
                'id': new_user.id,
                'user': new_user.username,
                'mobile': new_user.mobile
            }
            token = generate_jwt(data_)    # 导入使用封装的方法
            return Response({'token': token})

前端把token保存在浏览器本地储存


localStorage.setItem('token', resp.data.token)
// sessionStorage.setItem('')
          

 前端请求中 给一个token的携带参数

 
this.$axios
      .get("/goods/user/collection/", {    //请求头携带一个token数据
        headers:{'token':localStorage.getItem("token")||"", platform:"web"}
      })

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值