python中的序列化和定时web令牌

2024-04-25 21:59:13 发布

您现在位置:Python中文网/ 问答频道 /正文

嗨,我正在努力理解下面的例子

我想为用户添加重置网站密码的功能

正如许多网站一样,我希望向用户发送一封令牌电子邮件,让他们重置密码

我遵循一个建议使用名为itsdangerous的python模块的指南

在部署到我的网站之前,我从教程中获得了以下代码作为一个简单示例,以了解模块的工作原理:

from itsdangerous import TimedJSONWebSignatureSerializer as Serializer
s = Serializer('secret_key',30)
token = s.dumps({'usr_id': 1}).decode('utf-8')
s.loads(token)

现在,如果我运行此命令,将发生以下情况:

我使用s创建一个令牌,允许我获取一个字典{'usr_id':1},然后如果我在30秒内运行s.loads(token),我可以拿回这个字典{'usr_id':1},否则我会出错

有人能解释一下(对初学者来说很简单)这里发生了什么吗

我真的不明白发生了什么,也不知道Serializersecret_key参数在做什么

另外,如果有人能解释这种代码如何帮助我允许用户通过电子邮件重置他们的密码,那就太好了。谢谢


Tags: 模块key代码用户tokenid密码secret
1条回答
网友
1楼 · 发布于 2024-04-25 21:59:13

因此,它的库提供的这种序列化是基于JSON Web令牌的。为了创建JSON Web令牌,您需要一个密钥,该密钥是一个签名,用于证明标记化的信息是由您提供的,并且只能使用此签名进行编辑

JSON Web令牌可以由任何人读取,但只能由知道密钥的人编辑-因此您不应该像密码一样标记敏感信息,但用户id是可以的,它与过期时间集一起刚好足以检查其身份。你必须隐藏你的秘密钥匙并保证它的安全

在您的情况下,一个很好的用法是向用户电子邮件发送一个过期令牌(比如说一天),以证明它有权更改密码。一天后它将无效,所以你不会破坏你的系统

什么是JSON Web令牌结构?

在紧凑的形式中,JSON Web标记由三部分组成,三部分由点(.)分隔,分别是:

标头:标头通常由两部分组成:令牌的类型(JWT)和正在使用的签名算法(如HMAC SHA256或RSA)

有效载荷:信息和失效时间保存在此处

签名:签名用于验证消息在发送过程中没有发生更改,如果令牌是用密钥签名的,它还可以验证JWT的发送者是它所说的人

Therefore, a JWT typically looks like the following. xxxxx.yyyyy.zzzzz

通过将JWT粘贴到以下链接,您可以查看JWT内部的内容: https://jwt.io/

更多有关: https://jwt.io/introduction/

相关问题 更多 >

    热门问题