2009-03-10 11 views
5

Estoy diseñando una aplicación web. Debo permitir que el usuario se autentique. Estoy un poco indeciso para dejar que el usuario transmita su nombre de usuario/contraseña en texto claro ... algo así como: api.mysite.com/auth.php?user=x & pase = yDiseñar una API web: ¿Cómo autenticar?

Otra opción que leí fue Base64 codificando el nombre de usuario/contraseña y luego enviando una solicitud HTTP. Entonces, ¿eso significa que en el lado del servidor, yo _GET ['user'] y _GET ['password'] y luego de alguna manera decodificarlos?

¿Eso es lo que hace twitter: http://apiwiki.twitter.com/REST+API+Documentation#Authentication?

Respuesta

7

Base64 no es protección en absoluto. Use SSL para seguridad real.

+0

¿cómo funciona la seguridad de api de Twitter? http://apiwiki.twitter.com/REST+API+Documentation#Authentication – shergill

+0

Están utilizando HTTP Basic Auth, que es texto sin formato, que el póster no quería. – truppo

+0

me pregunto ... si no es un problema/problema para Twitter; entonces, ¿es realmente tan importante? – shergill

2

Si se trata de un servicio web, será mejor que utilice una forma de autenticación más segura. Busque, por ejemplo, en el protocolo LiveJournal: Challenge-Response.

+0

¿cómo funciona esto?: Http://apiwiki.twitter.com/REST+API+Documentation#Authentication? – shergill

3

Justo esta semana el IETF publicó un new draft discutiendo las propiedades de seguridad de los diversos mecanismos de autenticación en HTTP. Debería encontrar información útil allí.

Personalmente recomendaría al menos leer sobre digest authentication y analizar si es adecuado para usted.

El uso de SSL también puede ser una opción. Sin embargo, también aborda problemas adicionales a expensas del rendimiento, la capacidad de caché y otros. Mantiene la información de carga útil confidencial. Si esto es un requisito, entonces es su camino a seguir.

5

Según lo mencionado por truppo, primero use SSL.

Lo que muchos servicios web hacen es tener un servicio "autenticado" que devuelve un token que luego se usa más adelante, y puede usarse en texto plano, ya que solo es válido por un tiempo limitado. Cuando caduca, el cliente simplemente realiza otra autenticación.

La principal ventaja de esto es que reduce el número de solicitudes SSL, lo que aligera la carga en el servidor.

1

No utilice la autenticación de nombre de usuario/contraseña habitual para la API. La gente realmente no debería ser forzada a poner credenciales de servicios extranjeros en un servicio mashup.

Considere usar oauth http://oauth.net/ o al menos algún sistema basado en la respuesta al desafío, como sugirió Eugene.

Una manera fácil sería dejar que el servicio de invitados genere un token que está conectado a su aplicación y a un usuario. Si realiza algún trabajo, podría incluso asegurar que tokencreation solo haya permitido servicios extranjeros con algunos mecanismos de clave privada/pública.

El usuario tiene que autorizar este token en su aplicación antes de que el servicio al cliente pueda usarlo para autenticarse.

+0

Gracias por su respuesta. Voy a implementar el sistema de desafío-respuesta. – shergill

0

He encontrado este article ojo abierto.

En resumen: utilice un par de claves de API por usuario. Una es para la autenticación del cliente, una para la firma de parámetros.

Cuestiones relacionadas