2016-03-07 3 views
0

Я хочу использовать Http Digest с Volley. До сих пор я использовал следующий код:Как использовать Http Digest Auth с volley на Android

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

} 

До сих пор я получаю ответ от сервера, как неправильные учетных данных, что означает, что аутентификация работает, но только неправильные учетные данные становятся пройдены. Но мои полномочия верны.

+0

Звучит хорошо. Однако я не вижу никаких вопросов. – barq

+0

Я не получаю никаких результатов. Только неправильные учетные данные. Я думаю, что способ передачи учетных данных неверен. – MrShadow

ответ

1

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

новее Digest функцию можно найти здесь: https://tools.ietf.org/html/rfc7616

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

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

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

RequestQueue requestQueue; 
    requestQueue = new RequestQueue(
      new DiskBasedCache(rootDir), 
      new BasicNetwork(new HttpDigestStack()) 
    ); 
    requestQueue.start(); 
+0

Можете ли вы уточнить, пожалуйста. – MrShadow

+0

Все дороги ведут к этому коду, но ни одного достойного ответа о том, как его реализовать! – PassKit

+0

, но этот код является реализацией – djodjo