如何刷新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
祝你好运。
我是 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
祝你好运。