Как использовать Http Digest Auth с залпом на Android

Я хочу использовать 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 ответ

Вы используете кодировку Base64, которая подходит для Basic Auth, но это не то, как дайджест работает. Дайджест и основные спецификации Auth можно найти здесь: https://tools.ietf.org/html/rfc2617

более новые спецификации дайджеста можно найти здесь: https://tools.ietf.org/html/rfc7616

И хорошее дополнительное объяснение в Википедии здесь: https://en.wikipedia.org/wiki/Digest_access_authentication

Для реализации Volley Digest Auth вы можете использовать: http://www.java2s.com/Open-Source/Android_Free_Code/Framework/platform/com_gm_android_volleyHttpDigestStack_java.htm

Вам просто нужно будет передать этот стек http, когда вы создаете свою сеть, которую затем используете для создания запроса:

    RequestQueue requestQueue;
    requestQueue = new RequestQueue(
            new DiskBasedCache(rootDir),
            new BasicNetwork(new HttpDigestStack())
    );
    requestQueue.start();
Другие вопросы по тегам