如何在Android上使用Http Digest Auth和volley

时间:2016-03-07 06:58:10

标签: android android-volley http-authentication http-digest

我想将 Http Digest Volley一起使用。到目前为止,我使用了以下代码:

@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;

}

到目前为止,我从服务器获得的响应是​​错误的凭据,这意味着身份验证正在运行,但只有错误的凭据才会通过。但我的凭据是正确的。

1 个答案:

答案 0 :(得分:1)

您使用Base64编码,这对Basic Auth来说很好,但这不是摘要的工作方式。 摘要&amp;可在此处找到基本身份验证规范:https://tools.ietf.org/html/rfc2617

可以在此处找到较新的摘要规范:https://tools.ietf.org/html/rfc7616

在维基百科上有一些很好的额外解释:https://en.wikipedia.org/wiki/Digest_access_authentication

对于Diley 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();