如何刷新JWT

how to refresh JWT

我是 Flask 的新手,我想使用 JWT 保护我的应用程序。我使用 pyjwt python 库。 pyjwt中是否可以刷新jwt?有很多关于 flask-jwt-extended 的信息,但没有关于 pyjwt 的信息。

PyJWT is a Python library which allows you to encode and decode JSON Web Tokens

此库尚未为用户会话做好准备。你应该自己实现刷新逻辑:

import jwt
from datetime import datetime, timedelta, timezone

payload = {"username": "john", "session_id": "abc"}

# add token expiration time (5 seconds):
payload["exp"] = datetime.now(tz=timezone.utc) + timedelta(seconds=5)

# this token is valid for 5 seconds
token = jwt.encode(payload, "some_secret_phrase", algorithm="HS256")

# get token data:
decoded_payload = jwt.decode(token, "some_secret_phrase", algorithms=["HS256"])

# if we run ↑this↑ after 5 seconds jwt.exceptions.ExpiredSignatureError: Signature has expired will be raised
# in other case we will get decoded data:
# {'username': 'john', 'session_id': 'abc', 'exp': 1650187206}

# now we should update 'exp' for 5 seconds again
decoded_payload['exp'] = datetime.now(tz=timezone.utc) + timedelta(seconds=5)

# and generate new token
new_token = jwt.encode(payload, "some_secret_phrase", algorithm="HS256")

# after receiving this new token client will be able to use it for 5 seconds before another refreshing process

我的例子超级简单,不安全只是演示如何刷新令牌。对于真正的 Web 应用程序,您必须使用更复杂的逻辑和 refresh tokens

我也是初学者

客户端可以解析访问令牌的过期时间。 如果访问令牌已过期,那么您必须根据您的算法请求带有刷新令牌的新访问令牌。

这是一个简单的参考来源。

https://github.com/nevertheless-good/fastapi-jwt-auth-server.git

祝你好运。