You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
92 lines
2.2 KiB
92 lines
2.2 KiB
# -*- coding: utf-8 -*-
|
|
"""
|
|
utils.jwt
|
|
~~~~~~~~~~~~~~
|
|
|
|
jwt的相关操作.
|
|
|
|
:copyright: 云南新八达科技有限公司.
|
|
:author: 李进才.
|
|
"""
|
|
import jwt
|
|
from datetime import datetime, timedelta
|
|
import configparser
|
|
|
|
# 创建一个类
|
|
config = configparser.ConfigParser()
|
|
configFilePath = r'./config.ini'
|
|
config.read(configFilePath)
|
|
|
|
|
|
def generate_jwt_short(payload, secret=None):
|
|
"""
|
|
|
|
:param payload: dict 载荷
|
|
:param secret: 密钥
|
|
:return: 生成jwt
|
|
"""
|
|
now = datetime.utcnow()
|
|
expiry = now + timedelta(hours=int(config.get("jwt", "EXPIRY_HOURS"))) # 短期token
|
|
_payload = {'exp': expiry}
|
|
_payload.update(payload)
|
|
|
|
if not secret:
|
|
secret = config.get("jwt", "SECRET") # 需要在配置文件配置JWT_SECRET
|
|
|
|
token = jwt.encode(_payload, secret, algorithm='HS256')
|
|
return token.decode()
|
|
|
|
|
|
def generate_jwt_long(payload, secret=None):
|
|
"""
|
|
|
|
:param payload: dict 载荷
|
|
:param secret: 密钥
|
|
:return: 生成jwt
|
|
"""
|
|
now = datetime.utcnow()
|
|
expiry = now + timedelta(days=int(config.get("jwt", "REFRESH_DAYS"))) # 长期token
|
|
_payload = {'exp': expiry}
|
|
_payload.update(payload)
|
|
|
|
if not secret:
|
|
secret = config.get("jwt", "SECRET") # 需要在配置文件配置JWT_SECRET
|
|
|
|
token = jwt.encode(_payload, secret, algorithm='HS256')
|
|
return token.decode()
|
|
|
|
|
|
def verify_jwt(token, secret=None):
|
|
"""
|
|
校验jwt
|
|
:param token: jwt
|
|
:param secret: 密钥
|
|
:return: dict: payload
|
|
"""
|
|
if not secret:
|
|
secret = config.get("jwt", "SECRET")
|
|
|
|
try:
|
|
payload = jwt.decode(token, secret, algorithm=('HS256'))
|
|
except jwt.PyJWTError:
|
|
payload = None
|
|
|
|
return payload
|
|
|
|
|
|
def verify_jwt_username(token, secret=None):
|
|
"""
|
|
校验jwt
|
|
:param token: jwt
|
|
:param secret: 密钥
|
|
:return: dict: payload
|
|
"""
|
|
if not secret:
|
|
secret = config.get("jwt", "SECRET")
|
|
|
|
try:
|
|
payload = jwt.decode(token, secret, algorithm=('HS256'))
|
|
except jwt.PyJWTError:
|
|
payload = None
|
|
|
|
return payload['UserName']
|
|
|