摘要式身份验证(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