0

我想将Http DigestVolley. 到目前为止,我使用了以下代码:

@Override
public Map<String, String> getHeaders() throws AuthFailureError {

    HashMap<String, String> params = new HashMap<String, String>();
    String creds = String.format("%s:%s","admin","mypass");
    String auth = "Digest " + Base64.encodeToString(creds.getBytes(), Base64.NO_WRAP);
    params.put("Authorization", "Digest " +auth);
    return params;

}

到目前为止,我从服务器收到了错误凭据的响应,这意味着身份验证正在工作,但只有错误的凭据被通过。但我的凭据是正确的。

4

1 回答 1

1

您使用 Base64 编码,这对于基本身份验证来说很好,但这不是摘要的工作方式。可以在此处找到摘要和基本身份验证规范:https ://www.rfc-editor.org/rfc/rfc2617

更新的摘要规范可以在这里找到:https ://www.rfc-editor.org/rfc/rfc7616

以及关于维基百科的很好的额外解释:https ://en.wikipedia.org/wiki/Digest_access_authentication

对于 Digest Auth 的 Volley 实现,您可以使用: http ://www.java2s.com/Open-Source/Android_Free_Code/Framework/platform/com_gm_android_volleyHttpDigestStack_java.htm

当您创建网络时,您只需要传递此 http 堆栈,然后使用它来创建您的 RequestQueue:

    RequestQueue requestQueue;
    requestQueue = new RequestQueue(
            new DiskBasedCache(rootDir),
            new BasicNetwork(new HttpDigestStack())
    );
    requestQueue.start();
于 2016-03-20T20:25:14.500 回答