Autorización de token para una aplicación de Android
Estoy intentando utilizar la API web segura de mi aplicación para Android. La API web utiliza la autenticación básica y el uso de un token generado por el servidor. He podido utilizar la API de la web utilizando curl como se muestra a continuación.
En primer lugar, para autenticar al usuario y obtener el token.
- Android cómo obtener indican cuando se pierde la conexión a Internet?
- No se puede HttpParams trabajar con Postrequest
- No se puede hacer una referencia estática al método no estático getSystemService (String) del tipo
- Android comprueba si existe un archivo en un servidor remoto mediante su URL
- Android: comprueba mediante programación la conexión a Internet y muestra el diálogo si no está conectado
curl http://localhost:3000/api/api_keys -u '[email protected]:UserPassword'
returns {"token":"0d63b512573dce7be5eb53bab58a5625"}
En segundo lugar, utilizo el token para llamar a la API como un usuario autenticado.
curl http://localhost:3000/api/exams -H 'Authorization: Token token="0d63b512573dce7be5eb53bab58a5625"'
devuelve el objeto json apropiado.
El problema es cuando trato de llamar a la API web desde el cliente de Android utilizando el código de abajo, la API web no recoger el encabezado de autorización y, por tanto, lanza la solicitud.
... HttpClient client = new DefaultHttpClient(new BasicHttpParams()); HttpGet httpGet = new HttpGet(targetUrl.toString()); httpGet.setHeader("Content-type", "application/json"); httpGet.addHeader(BasicScheme.authenticate(new UsernamePasswordCredentials("[email protected]", "Password!"), "UTF-8", false)); httpGet.addHeader("Authorization", "Token token=\"" + getToken() + "\""); try { HttpResponse response = client.execute(httpGet); ...
¿Cómo debo autenticar la aplicación de Android en la API web?
- ¿Es wpa_supplicant específico para el dispositivo android o específico para la versión android?
- ¿Por qué funciona el ping en algunos dispositivos y no en otros?
- No hay acceso a Internet en el emulador de Android, conexión a Internet compartida
- Comprobar la conexión a Internet en toda mi aplicación
- Descargar imágenes de la URL a la tarjeta SD
- ¿Cómo olvidar una red inalámbrica en android mediante programación?
- ConnectivityManager.EXTRA_NO_CONNECTIVITY es siempre falsa en Android Lollipop
- Cómo manejar java.net.UnknownHostException mientras se usa retrofit
Debe enviar la solicitud primero para obtener el token. A continuación, puede utilizar el token.
Me di cuenta de que estaba enviando las credenciales de usuario de nuevo al hacer la solicitud "autenticada". Esto hacía que el servidor ignorara el token y devolviera una respuesta 401 no autorizada.
Así que la solución fue eliminar la siguiente línea de mi "solicitud autenticada".
httpGet.addHeader(BasicScheme.authenticate(new UsernamePasswordCredentials("[email protected]", "Password!"), "UTF-8", false));
Para ser claro, esta línea sigue siendo necesaria para la primera solicitud.
- Excepción personalizada de los extremos de Google Cloud
- Barra de acciones Tabulaciones CustomView demasiado largo