赞
踩
JSON Web Token(JWT)是一个基于 RFC 7519 的开放数据标准,它定义了一种宽松且紧凑的数据组合方式,使用 JSON 对象在各应用之间传输加密信息。该 JSON 对象可以通过数字签名进行鉴签和校验,一般地,JWT 可以采用 HMAC 算法,RSA 或者 ECDSA 的公钥/私钥对数据进行签名操作。
一个 JWT 通常有 HEADER (头),PAYLOAD (有效载荷)和 SIGNATURE (签名)三个部分组成,三者之间使用“.”链接,格式如下:
头.有效载荷.签名
下面是一个实例
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpYXQiOjE1NzYxMzI1NTAsImlkIjoxLCJ1c2VybmFtZSI6ImFkbWluIn0.yORwdJrpC2YUyUxHNNZJ63bzdoNwajTK4W-OrIJ5HPI
下面是Django解析JWT的一个实例
import logging import time from django.http import JsonResponse from django.utils.deprecation import MiddlewareMixin import jwt from dataProject.settings import * ##检查JWT def checkJWT(req, jwtstr): ##解码 data = jwt.decode(jwtstr, JWT_SECURE_KEY) ##是否是admin try: assert data.get('username1', None) == 'admin' ###判断token是否过期 if int(time.time()) - data['iat'] > JWT_TIMEOUT: return JsonResponse({"responseStatus": {"status": 401, "message": 'Bad Request'}}, status=401) except AssertionError as e: logging.error('Bad Request from {}'.format( req.META.get('HTTP_X_FORWARDED_FOR', None) or req.META.get('REMOTE_ADDR', None))) return JsonResponse({"responseStatus": {"status": 401, "message": 'Bad Request'}}, status=401) class check_jwt_before_view(MiddlewareMixin): def process_request(self, req): try: JsonWebToken = req.COOKIES['Admin-Token'] except KeyError as e: return JsonResponse({"responseStatus": {"status": 401, "message": 'Bad Request'}}, status=401) ##检查JWT checkJWT(req, JsonWebToken)
核心方法是jwt.decode,参数是jwt字符串和密钥
说明:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。