Flask 定时JSON web签名序列化程序是如何工作的?

Flask 定时JSON web签名序列化程序是如何工作的?,flask,access-token,secret-key,Flask,Access Token,Secret Key,如果生成如下令牌,我是否可以将API的操作限制为特定用户: from itsdangerous import TimedJSONWebSignatureSerializer as Serializer expiration = 600 s = Serializer(current_app.config['SECRET_KEY'], expires_in = expiration) return s.dumps({ 'id': kwargs.get('user_id') }) 以及验证 @st

如果生成如下令牌,我是否可以将API的操作限制为特定用户:

from itsdangerous import TimedJSONWebSignatureSerializer as Serializer

expiration = 600
s = Serializer(current_app.config['SECRET_KEY'], expires_in = expiration)
return s.dumps({ 'id': kwargs.get('user_id') })
以及验证

@staticmethod
    def verify_auth_token(token):
        s = Serializer(app.config['SECRET_KEY'])
        try:
            data = s.loads(token)
        except SignatureExpired:
            return None # valid token, but expired
        except BadSignature:
            return None # invalid token
        user = User.query.get(data['id'])
        return user

我不明白这是如何工作的,如何实现安全性的。我用于保护API的方式,例如,用户希望对/posts/10执行HTTP PUT我通常会获取帖子的作者,即用户id,然后查询数据库获取该用户id的令牌,如果请求令牌与查询的令牌匹配,则PUT是安全的。我读过这篇文章,但不完全理解它如何在不将任何内容存储在数据库中的情况下实现安全性。有人能解释一下它是怎么工作的吗

通过在登录时签名并发送原始令牌,服务器基本上会向前端提供一个用户将有权访问的数据的所有访问票证,并且只要令牌没有过期,前端就会在将来的所有请求中使用该令牌(金票)(令牌可以设置为过期或不过期)。服务器知道令牌没有被篡改,因为签名基本上是用户可识别数据(用户id、用户名等)的加密散列。因此,如果您从以下内容更改令牌信息:

{"user_id": 1}
{"user_id": 2}
例如:

{"user_id": 1}
{"user_id": 2}
然后签名将不同,服务器立即知道此令牌无效

这提供了一种身份验证方法,使服务器不必拥有会话,因为它每次都验证令牌


这是一个令牌可能看起来像什么的示例(它可以使用JSON web令牌的这种格式)

我知道这是一篇老文章,但它可以在将来帮助其他人:)