PyJWT,一个PythonJWT认证的高效库!

文摘   2024-11-17 18:20   河南  

嘿,伙计们!今儿个咱来唠唠 PyJWT 这玩意儿,一个在 Python 里玩 JWT(JSON Web Token)认证贼溜的库。JWT 这东西,简单来说,就像个通行证,你网站的用户登录一次,你给他发个 JWT,他拿着这玩意儿下次再来,就不用再输密码了,方便得一批。PyJWT 就是帮你轻松创建和验证这些“通行证”的工具。

装上 PyJWT,开搞!

装这玩意儿,跟装其他 Python 库一样,pip 一下就搞定:
    pip install pyjwt

JWT 的三段式

JWT 长得像这样:xxxxx.yyyyy.zzzzz,三段用点隔开。这可不是随便写的,每一段都有自己的意思。
  • 第一段(Header):说的是 JWT 用的什么加密算法,一般是 HS256 或 RS256。
  • 第二段(Payload):放的是用户信息,比如用户名、用户 ID、过期时间啥的。
  • 第三段(Signature):签名,用来验证 JWT 是不是被篡改过。

用 PyJWT 创建 JWT

    import jwt
    
    # 你的绝密密钥,千万别泄露!
    secret_key = “your-256-bit-secret”
    
    # 要放进 JWT 里的用户信息
    payload = {
        “user_id”:123,
        “username”: “老王”,
        “exp”:datetime.datetime.utcnow() + datetime.timedelta(minutes=30)  # 过期时间,30 分钟后
    }
    
    # 生成 JWT
    encoded_jwt = jwt.encode(payload, secret_key, algorithm=“HS256”)
    
    print(encoded_jwt)

这段代码,先导入了 jwt 库,然后定义了个密钥 secret_key,这玩意儿得保密,就像你家保险柜密码一样。接着,payload 里放了用户信息,注意这里有个 exp,是过期时间,过了这时间 JWT 就失效了,得重新登录。jwt.encode() 把 payload 和密钥用 HS256 算法加密,生成了 JWT。

温馨提示:过期时间很重要,别忘了设!

解码 JWT

有了 JWT,还得能解码,才能拿到用户信息。
    import jwt
    
    # 刚才生成的 JWT
    encoded_jwt = “....”  #  把上面生成的 JWT 粘贴过来
    
    # 解码 JWT
    try:
        decoded_payload = jwt.decode(encoded_jwt, secret_key, algorithms=[“HS256”])
        print(decoded_payload)
    except jwt.ExpiredSignatureError:
        print(“JWT 过期了!”)
    except jwt.InvalidTokenError:
        print(“JWT 不合法!”)

这里用 jwt.decode() 解码 JWT,注意要传密钥和算法。万一 JWT 过期了或者被人篡改了,jwt.decode() 会抛出异常,所以要用 try...except 抓住这些异常。

实际应用场景

这 JWT,用处可大了,比如:
  • 用户登录:用户登录成功后,给他发个 JWT,下次他带着 JWT 来,就不用再输密码了。
  • API 认证:调用 API 时,在请求头里带上 JWT,服务器就能知道你是谁,有没有权限调用这个 API。

其他 PyJWT 的骚操作

PyJWT 除了创建和解码 JWT,还能干不少其他事儿,比如:

  • 自定义 claims:可以在 payload 里加一些自定义的信息。
  • 不同的加密算法:除了 HS256,还能用 RS256、ES256 等其他算法。

温馨提示:用什么算法,得根据你的实际情况来定。

今儿个就先唠到这儿,PyJWT 这玩意儿,用起来还是挺简单的,赶紧试试吧!

翔宇风
精彩纷呈,引人入胜。
 最新文章