摘要式身份验证(Java / Android)

我已经阅读了每一个可能的指南,从维基百科到其他实现,但不能为我的生活得到这个工作! 我试图用我的android应用程序连接到我的Calibre Content Server,使用okhttp3和一个简单的头文件。 键[0]是用户名(口径),键[1]是口令(测试)。

HashMap<String, String> digestHeader = parseHeader(response.header("Www-Authenticate"));
String ha1 = FileHelper.convertToMD5(key[0] + ":" + digestHeader.get("realm") + ":" + key[1]);
String ha2 = FileHelper.convertToMD5("GET:" + uri); //Tried with CONNECT
String nc = "00000001";
String cnonce = handler.getPreferences().getUUID();

String responseString = FileHelper.convertToMD5(
        ha1 + ":" +
        digestHeader.get("nonce") + ":" +
        nc  + ":" +
        cnonce + ":" +
        digestHeader.get("qop") + ":" +
        ha2);

server.setKey("Digest " +
        "username=""+ key[0] +"", " +
        "realm="" + digestHeader.get("realm") + "", " +
        "nonce="" + digestHeader.get("nonce") + "", " +
        "uri="" + uri+ "", " +
        "qop=" + digestHeader.get("qop") + ", " +
        "nc=" + nc + ", " +
        "cnonce="" + cnonce + "", " +
        "response="" + responseString + "", " +
        "algorithm=" + digestHeader.get("algorithm"));

从那里我只是将它添加为“授权”标题。 它总是回来401未经授权! 这是原始响应和我的更新摘要,密码在我手动在浏览器中测试时起作用。

Www-Authenticate:Digest realm =“您的口径库”,nonce =“1494719624:ca232cc18dafe3a6655753aabe0c85c0”,算法=“MD5”,qop =“auth”

Authorization:Digest username =“calibre”,realm =“Your calibre library”,nonce =“1494721002:e18358fef996544c2e7067e990806800”,uri =“/ opds”,qop = auth,nc = 00000001,cnonce =“1d02d071-facc-4dc2-bb95 -412fbc1053b7“,响应=”78e8b090d510e3e512fa8f77888dbdb“,算法= MD5

我的代码有问题吗? 摘要相当混乱,我不确定是否需要包含nc和cnonce,或者如果我的uri不正确(我已经尝试了完整路径和端口后面的所有内容),还是其他东西?

我试图使用okhttp-digest插件,但它似乎是为okhttp2而构建的,更新的示例更改了每个请求的授权,这对我来说不起作用。 有另一种方法来解决这个问题吗?

链接地址: http://www.djcxy.com/p/22317.html

上一篇: Digest Authentication (Java/Android)

下一篇: Apache http client sample failing for Digest authentication