Skip to main content

jwt学习

· 2 min read
Czasg

JWT 全称 JSON Web Token,是一种允许携带非敏感信息的认证机制。常用于服务之间的认证校验。

JWT 结构组成包括三个部分:

  • Header:一般用于指定token类型,包括algtyp两个字段
  • Payload:数据载体,一般需要包含exp表示过期时间
  • Signature:摘要,是前面两个部分的摘要运算

组成形式为 Header计算Base64 . Payload计算Base64 . 前两部分哈希运算

https://github.com/czasg/pywss/blob/master/pywss/middleware/jwt.py
import json
import time
import base64
import hashlib


class JWT:

def __init__(self, secret: str, expire: int = 3600):
self.secret = secret.encode()
self.expire = expire
self.header = base64.b64encode(json.dumps({
"alg": "HS256",
"typ": "JWT",
}, ensure_ascii=False).encode())

def encrypt(self, **kwargs):
kwargs.update(exp=int(time.time()) + self.expire)
payload = base64.b64encode(json.dumps(kwargs, ensure_ascii=False).encode())

sha256 = hashlib.sha256()
sha256.update(self.header)
sha256.update(payload)
sha256.update(self.secret)
signature = sha256.hexdigest()

return f"{self.header.decode()}.{payload.decode()}.{signature}"

def decrypt(self, token: str) -> dict:
if token.startswith("Bearer"):
token = token.replace("Bearer", "", 1).strip()

tokens = token.split(".")
if len(tokens) != 3:
raise Exception("Invalid JWT Token")

header, payload, signature = tokens # type: str
sha256 = hashlib.sha256()
sha256.update(header.encode())
sha256.update(payload.encode())
sha256.update(self.secret)
if sha256.hexdigest() != signature:
raise Exception("Invalid JWT Token, Signature Except")

return json.loads(base64.b64decode(payload))

👇👇👇

本文作者: Czasg
版权声明: 转载请注明出处哦~👮‍