我试图通过HTTP摘要身份验证实现扭曲的信誉,而且我遇到了一些困难。我能够使用checkPassword,但我不想将我的密码明确存储在数据库中。
我在我的密码数据库中存储用户名:realm:password的MD5,并且我使用以下方法计算它:
from twisted.cred._digest import calcHA1
def calc_ha1(self, password, username=None):
if username is None:
username = self.avatarId
realm = self.digest_factory.digest.authenticationRealm
return calcHA1('md5', username, realm, password, None, None)
我的密码检查器如下所示:
def requestAvatarId(self, credentials):
username = credentials.username
try:
user = self.session.query(models.User).filter_by(username=username).one()
except NoResultFound as e:
return defer.fail(credError.UnauthorizedLogin("No such administrator"))
if credentials.checkHash(user.password_hash):
return defer.succeed(username)
else:
return defer.fail(credError.UnauthorizedLogin("Bad password"))
但是,当checkHash计算HA2并将其与我在数据库中的HA1组合时,它与浏览器发送的内容不匹配。我用调试器逐步完成了checkHash代码,一切都按照我的预期运行。有没有人有想法?
由于 -s