2009-06-03 51 views
5

He creado una aplicación de servidor RESTful que se ubica y brinda servicios a las URL útiles, como www.site.com/get/someinfo. Está construido en primavera.Proporcionar las credenciales de forma segura a una API RESTANTE

Sin embargo, estos accesos están protegidos por contraseña. Ahora estoy construyendo una aplicación cliente que se conectará a esta aplicación RESTful y solicitará datos a través de una URL. ¿Cómo puedo pasar las credenciales? Actualmente, solo muestra el cuadro de usuario/contraseña al usuario, pero quiero que el usuario pueda escribir el nombre de usuario y la contraseña en un cuadro en la aplicación cliente y que la aplicación cliente proporcione las credenciales a la aplicación RESTful cuando solicita datos. El cliente está construido usando Struts.

Saludos

EDITAR - Creo que no hice la pregunta bastante clara. Ya estoy forzando HTTPS, mi pregunta es más, dentro del código, cuando solicito datos de www.site.com/get/someinfo, ¿cómo paso mis credenciales junto con la solicitud?

+0

Algunas preguntas previas relevantes que podrían ayudarlo ... [http://stackoverflow.com/questions/458482/rest-and-authentication-variants](http://stackoverflow.com/questions/458482/rest- and-authentication-variants) [http://stackoverflow.com/questions/319530/restful-authentication](http://stackoverflow.com/questions/319530/restful-authentication) –

+0

Esto parece útil. Lo que mencionan HTTP AUTH: ¿se hace explícitamente? No necesito usar tokens o cosas por el estilo, necesito transferir estos datos específicamente a la aplicación RESTful ya que usa las credenciales más adelante. ¿Puedo enviar estos creds directamente a través de AUTH? – mtrc

+0

Sí, creo que comprendí y pensé que estabas buscando un esquema de autenticación, no implementando el paso repetido a través del cliente. Probablemente no sea yo quien responda esa pregunta, ya que no tengo mucha experiencia en Java, pero podría ser útil publicar un fragmento de cómo está llamando al resto de Uri ahora. ¿hay una sobrecarga que permita el paso de las credenciales de autenticación básicas? –

Respuesta

1

Bueno, https no tiene nada que ver con la autenticación, solo es el cifrado del nivel de transporte.

si interactúa con una API de HTTP, ya sea que sea https o no, y aparece el cuadro de diálogo emergente, significa que usa la autenticación HTTP, ya sea básica o digestiva. Si su cliente crea una instancia de un cliente http para leer los datos de esos "servicios", puede pasar esas credenciales cuando crea una instancia del objeto.

Si usa la secuencia de comandos del lado del cliente, XmlHttpRequest también admite la autenticación http.

Por lo tanto, en términos de código, la forma de pasar las credenciales a los servicios RESTful depende del cliente http que esté utilizando (el objeto que instancia para recuperar los datos). Simplemente puede recopilar dicho nombre de usuario/contraseña del cliente y usarlo para llamar al otro servicio.

2

Si puede añadir cabeceras HTTP a sus solicitudes usted puede agregar el encabezado Authorization:

Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ== 

donde se utiliza la autenticación básica y el bit QWxhZGRpbjpvcGVuIHNlc2FtZQ== es "username:password" base64 (sin las comillas) . RFC 2617

+0

== no debería estar en una URL. Sin embargo, puede quitarlo y agregarlo examinando la longitud de la cadena y entendiendo la codificación de base64. – aehlke

+5

El encabezado Authorization no es parte de la URL. Es un encabezado, y no hay restricciones para poner == en un encabezado. –

0

ver soluciones existentes. En este caso, oauth

5

Es más o menos tiene 3 opciones:

  1. HTTP Auth
  2. rodar su propio protocolo, idealmente HMAC desafío/respuesta basada
  3. OAuth

OAuth es actualmente es susceptible a una variación de un ataque de phishing, uno que es en gran parte indetectable para el objetivo. Como tal, no lo recomendaría hasta que se modifique el protocolo.

OAuth también debería ser una lección sobre lo difícil que es diseñar protocolos de seguridad, por lo que dudo en recomendar el uso de su propia ruta.

Eso deja HTTP auth, que probablemente sea mejor si puede usarlo.

Dicho todo esto, casi todo en Internet utiliza la autenticación basada en la forma, y ​​muchos ni siquiera se molestan con https para la seguridad de nivel de transporte, así que quizás simplemente enviar el texto de la contraseña en el claro es "suficientemente bueno" para sus propósitos . Aún así, animo a utilizar https, ya que al menos reduce los peligros para un hombre en el ataque medio.

Cuestiones relacionadas