哪个定时 JSONWebSignature 序列化器替代其危险更好?pyjwt 或 authlib

Li *_*Xin 7 flask pyjwt itsdangerous authlib

目前,我正在使用itsdangerous生成定时 json Web 签名作为用户进行身份验证和重置密码等的令牌。以下是代码:

from itsdangerous import TimedJSONWebSignatureSerializer as Serializer

class SampleCode:
    def generate_confirmation_token(self, expiration=600):
        s = Serializer(current_app.config['SECRET_KEY'], expires_in=expiration)
        return s.dumps({'confirm': self.id}).decode('utf-8')

    def confirm(self, token):
        s = Serializer(current_app.config['SECRET_KEY'])
        try:
            data = s.loads(token.encode('utf-8'))
        except:
            return False
        if data.get('confirm') != self.id:
            return False
        self.confirmed = True
        db.session.add(self)
        return True
Run Code Online (Sandbox Code Playgroud)

由于TimedJSONWebSignatureSerializer弃用并删除,itsdangerous 2.1.0我认为我可能需要转向提供 JWT/JWS 接口的其他一些库。

这里我有两个候选人,哪一个更好:

Rob*_*off 15

哪个库被评为“更好”很大程度上取决于用例。

如果你想保持简短,我会推荐 pyjwt。设置过期时间很容易,但我在 authlib JWS 文档中找不到该选项的合适标志。所以只需按如下方式更改您的代码:

import jwt
import datetime

class SampleCode:
    def generate_confirmation_token(self, expiration=600):
        reset_token = jwt.encode(
            {
                "confirm": self.id,
                "exp": datetime.datetime.now(tz=datetime.timezone.utc)
                       + datetime.timedelta(seconds=expiration)
            },
            current_app.config['SECRET_KEY'],
            algorithm="HS256"
        )
        return reset_token

    def confirm(self, token):
        try:
            data = jwt.decode(
                token,
                current_app.config['SECRET_KEY'],
                leeway=datetime.timedelta(seconds=10),
                algorithms=["HS256"]
            )
        except:
            return False
        if data.get('confirm') != self.id:
            return False
        self.confirmed = True
        db.session.add(self)
        return True
Run Code Online (Sandbox Code Playgroud)

希望我能帮忙!