我目前正在使用 MongooseIM 并希望将 HTTP auth 与 scram 一起使用。我正在使用 python passlib 来创建 scram 哈希:
import sys
from passlib.hash import scram
def main():
hash = scram.encrypt(sys.argv[1], rounds=4096, salt_size=16)
print hash
if __name__ == "__main__":
main()
然后我得到这样的结果:
$scram$4096$BmAsRcgZA4AwRijl3FtLyQ$sha-1=AXh5FzYzEnf6PaVQNR79AZhkwz8,sha-256=YZceXCVhfCBrr8sM9k3eS.5bztHugerGzjO97emvn20,sha-512=2NyVspiE7MP6xBAEycAV5Z/nIbBlki3sHfWvVUPPnEkMt5b4VbZfDZ0s8lvE/ns0scPGWmfKhUobmZbjfFH6RA
不幸的是,MongooseIM 的 HTTP 身份验证不接受这种格式。我查看了代码并试图找出 scram 散列密码的序列化形式如何:https ://github.com/esl/MongooseIM/blob/master/apps/ejabberd/src/scram.erl
deserialize(<<?SCRAM_SERIAL_PREFIX, Serialized/binary>>) ->
case catch binary:split(Serialized, <<",">>, [global]) of
[StoredKey, ServerKey,Salt,IterationCount] ->
{ok, #scram{storedkey = StoredKey,
serverkey = ServerKey,
salt = Salt,
iterationcount = binary_to_integer(IterationCount)}};
_ ->
?WARNING_MSG("Incorrect serialized SCRAM: ~p, ~p", [Serialized]),
{error, incorrect_scram}
end;
据我所知,我从 passlib 中得到了加盐(散列)密码的加盐、迭代计数和实际摘要(sha-1、sha-256、sha-512),但是 StoredKey 和 ServerKey 呢?二郎代码?host/get_password 返回的正确的序列化 HTTP 正文会是什么样子?
在此先感谢,马格努斯