我正在使用flask-login扩展程序设置Flask应用程序。 flask-login文档建议设置一个替代令牌生成器,它不仅仅使用用户ID和app secret来创建会话令牌(这是默认方法)。但它没有为如何做到这一点提供任何明确的建议。
因此,对于User.get_auth_token()
,我使用make_secure_token
函数,用户电子邮件和密码作为参数(所以我得到这些参数的哈希值+ app secret)。
接下来,我需要能够通过token_loader
回调从令牌中获取用户。在flask-login中生成令牌的默认方法是包括原始用户ID和用户ID + app secret的哈希值。这使得从令牌中查找用户非常简单 - 只需抓住ID并查找用户即可。
但是我应该在会话令牌中公开用户ID吗?如果不这样做,是否应该将会话令牌存储在数据库中或其他具有用户ID的位置以进行查找?
简而言之:有没有人知道创建安全令牌的最佳做法是什么?相应的token_loader
回调?
答案 0 :(得分:3)
在Flask邮件列表中,Matt Wright在烧瓶安全扩展中向我指出了his implementation。他使用itsdangerous创建一个签名令牌,该令牌对包含用户ID和密码哈希的序列化(via URLSafeTimedSerializer()
)列表进行编码。然后可以解码令牌以获取用户ID。