首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >哪个时间的JSONWebSignature序列化器替换它的危险是更好的?pyjwt或authlib

哪个时间的JSONWebSignature序列化器替换它的危险是更好的?pyjwt或authlib
EN

Stack Overflow用户
提问于 2022-02-28 09:18:43
回答 1查看 1.9K关注 0票数 5

目前,我正在使用itsdangerous生成时间上的json签名,作为用户对auth和resetpassword的令牌,下面是代码:

代码语言:javascript
复制
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

由于TimedJSONWebSignatureSerializer已弃用并在itsdangerous 2.1.0中删除,我想我可能需要转到其他提供JWT/JWS接口的库。

我有两位候选人,其中一位更好:

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-05-02 18:49:46

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

如果您想保持简洁,我建议您使用pyjwt。设置过期时间很容易,而在authlib JWS文档中却找不到适合该选项的标志。因此,只需按以下方式更改代码:

代码语言:javascript
复制
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

希望我能帮忙!

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71292764

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档