Xen*_*mar 4 django django-authentication
我最近使用教程构建了一个基于Django的身份验证系统.在这个系统中,我在forms.py中创建了一个令牌.然后,该令牌在激活激活邮件中发送(作为链接).
from django.contrib.auth.tokens import default_token_generator
token = default_token_generator.make_token(user)
Run Code Online (Sandbox Code Playgroud)
接收get请求的视图与此链接中提供的标记和用户标识匹配,并使用以下命令检查标记:
default_token_generator.check_token(user, token)
Run Code Online (Sandbox Code Playgroud)
这将验证令牌是否通过我的网站发送.但我不明白这个过程.令牌是唯一的,但我似乎没有在某处保存令牌?那么如何check_token()验证令牌呢?
令牌由时间戳和HMAC值组成.HMAC是一种键控散列函数:散列使用密钥(默认情况下settings.SECRET_KEY)来获取唯一值,但无论是否使用密钥,"unhashing"都是不可能的.
哈希结合了四个值:
然后令牌由当前时间戳和这四个值的散列组成.前三个值已经在数据库中,第四个值是令牌的一部分,因此Django可以随时验证令牌.
通过在哈希中包含用户的哈希密码和上次登录时间戳,当用户登录或更改其密码时,令牌会自动失效.还会检查当前时间戳以查看令牌是否已过期.请注意,即使当前时间戳包含在令牌中(作为base36编码的字符串),如果攻击者更改了值,散列也会更改,并且令牌将被拒绝.
| 归档时间: |
|
| 查看次数: |
2807 次 |
| 最近记录: |