Ладно, немного поэкспериментировав, я обнаружил, что смола вызывала мой метод AbstractAuthenticator «authenticate», который принимает объект HttpDigestCredentials вместо DigestCredentials (до сих пор не знаю, когда вызывается каждый из них), проблема в том, что HttpDigestCredentialsне имеет метода getDigest (), вместо этого у него есть метод getResponse (), который не возвращает хэш или, по крайней мере, не сравнимый.
После создания собственного хеша [[user: realmassword] [nonce] [method: uri]] хеш сильно отличается, на самом деле я думаю, что getResponse () не возвращает дайджест, но, возможно, ответ серверав браузер?
В любом случае это мой журнал отладки:
USER:user:PASSWORD:password:REALM:resin:METHOD:GET:URI/appe/appe.html:NONCE:HsJzN+j+GQD:CNONCE:b1ad4fa1ba857cac88c202e64528bc0c:CLIENTDIGEST:[B@5dcd8bf7:SERVERDIGEST:I4DkRCh21YG2Mk14iTe+hg==
, поскольку вы можете видеть, что оба предполагаемых одноразовых номера клиента очень сильно отличаются от одноразового номера, созданного сервером, на самом деле одноразовый номер клиента неПохоже на хеш MD5.
Пожалуйста, кто-нибудь делал это раньше?чего-то не хватает в HttpDigestCredentials?Я знаю, что дайджест почти не используется.
Пожалуйста, я знаю о SSL, но пока не могу получить сертификат SSL, поэтому не говорите мне «Почему вы не используете SSL».;)
Обновление:
Не уверен, что было правильно, но, как я читал ранее, Ресин использует формат base64 для хэшей, поэтому я использовал apache commons-codec-1.6 для использования encodeBase64String () и теперь хэши выглядят одинаково, но они не совпадают.
Я пробовал оба passwordDigest.getPasswordDigest(a1+':'+nonce+':'+a2); passwordDigest.getPasswordDigest(a1+':'+nonce+':'+ncount+':'+cnonce+':'+qop+':'+a2);
, и ни один из них не дает такой же хеш, как у HttpDigestCredentials.