Estoy creando una aplicación web y un servicio web RESTful.
He estado leyendo varios artículos sobre la mejor manera de autenticar las solicitudes al servicio web.
La mejor opción para mí parece ser utilizar la autenticación básica HTTP. Casi todos los artículos que he leído dicen que la autenticación debe estar encriptada sobre SSL o equivalente.
No estoy totalmente seguro de lo que esto implica. ¿Significa esto que todo mi servicio web tendrá que estar en un servidor seguro? ¿Esto ralentizará las cosas?
web-services
rest
authentication
ssl
https
Gaz_Edge
fuente
fuente
Respuestas:
En primer lugar, intente comprender cómo funciona la autenticación SSL (HTTPS) y HTTP.
Los métodos de autenticación HTTP habituales (resumen, básico y cualquier esquema de autenticación basado en formularios + cookies que puede implementar sobre HTTP) son inseguros por sí mismos, ya que envían información de autenticación más o menos en texto claro. Si los datos están en campos POST o encabezados, y si se aplica la codificación base64, no importa en absoluto a este respecto, la contraseña es claramente visible para cualquier persona con acceso al tráfico de red. Esto significa que la autenticación HTTP a través de un canal que no es de confianza no tiene valor: todo lo que necesita un atacante para leer su contraseña es detectar un poco la red.
SSL implementa un canal de comunicación seguro sobre un canal inherentemente inseguro. Esto funciona, más o menos, de la siguiente manera:
Tenga en cuenta algunos puntos importantes aquí:
Obviamente, hay algunos gastos generales involucrados, pero no es tan malo como parece: es principalmente en la escala donde "arrojar más hardware" es la respuesta adecuada, a menos que se esté preparando para cantidades de tráfico absolutamente masivas ( piensa en Google o Facebook). En circunstancias normales, es decir, el uso típico de aplicaciones web, la sobrecarga de SSL es insignificante y, en consecuencia, tan pronto como tenga datos confidenciales, es mejor ejecutar todo a través de SSL, incluidos los recursos. SSL también es la única forma viable de proteger el tráfico HTTP; otros métodos simplemente no están tan estandarizados y, por lo tanto, no son ampliamente compatibles, y absolutamente no desea implementar estas cosas usted mismo, porque honestamente, es demasiado fácil equivocarse.
TL; DR: Sí, SSL Autenticación + básico es una idea buena, sí, se necesita un servidor seguro (y un certificado válido ), sí, va a frenar las cosas un poco, pero no, esto no es algo que preocuparse por la derecha ahora.
fuente
HTTPS (SSL) no es autenticación de usuario para su información. Solo proporciona cifrado entre 2 puntos finales.
Pero sí, hay una pequeña cantidad de gastos indirectos (aunque no lo suficiente como para justificar un cambio en los planes / hardware). Mira aquí :
/programming/548029/how-much-overhead-does-ssl-impose
fuente
Con la autenticación básica HTTP, el nombre de usuario y la contraseña que proporciona el usuario se envían con cada solicitud al servidor. Esto significa que están en texto plano incluso en áreas de su sitio que no necesariamente necesitan ser seguras. Obviamente, querrá SSL aquí para mantener a sus usuarios seguros.
En teoría, podría usar la autenticación de cookies y solo poner SSL en la página de inicio de sesión (donde se envía el nombre de usuario y la contraseña). Si sus cookies son decentemente seguras y protegidas contra ataques de repetición, entonces un atacante no podría hacer nada con ellas, incluso si lograra obtener una.
fuente
La autenticación básica es establecer un nombre de usuario y contraseña en el encabezado de la solicitud http. Si no usa SSL o equivalente, entonces ese nombre de usuario y contraseña se envían en texto plano y es trivial para que cualquiera lo robe.
La mayoría de los servidores web admiten HTTPS fuera de la caja hoy en día y, aunque agrega una sobrecarga a cada llamada, esa sobrecarga es mínima.
Puede asegurar algunos puntos finales y no otros (es decir, tener un punto final autenticado que produzca un token que pueda usarse para otras llamadas). Sin embargo, recomendaría SSL para todo el servicio, ya que es mucho más seguro. (si nada más, detiene la intercepción de datos confidenciales)
fuente
Jeff Atwood escribió una breve publicación en el blog no hace mucho tiempo sobre si el cifrado completo es el camino a seguir. Describe algunos ejemplos del mundo real y también tiene algunas líneas sobre consideraciones de rendimiento.
Además, hace referencia a este artículo sobre un estudio de caso de Gmail, citando lo siguiente:
También menciona algunas mejoras recientes en el almacenamiento en caché de páginas del lado del cliente a través de HTTPS por parte del navegador .
A pesar de esto, señala, hay otras sanciones, la mayoría de las cuales no son el rendimiento sino los costos de implementación:
fuente
La autenticación básica HTTP sin su propio manejo de sesión probablemente lo dejará abierto a ataques de falsificación de solicitudes en sitios cruzados. Probablemente pueda usarlo si se combina con el manejo de su propia sesión, pero puede tener problemas para proporcionar una función limpia de "cerrar sesión".
No importa lo que use para la autenticación, deberá usar HTTPS para cifrar la conexión (a menos que solo se acceda a la aplicación web en una red segura y controlada). Puede ralentizar un poco las cosas (los establecimientos de conexión son caros, pero los navegadores tienden a mantener las conexiones por un tiempo), pero si desea una aplicación segura, no podrá evitarla de todos modos, por lo que realmente no necesita preocuparse por eso.
Nota: La "autenticación HTTPS" (que mencionó en el título) es engañosa: podría referirse a la autenticación de certificado de cliente SSL, que tiene poco que ver con el texto de su pregunta y tiene su propio conjunto de beneficios y problemas. Probablemente no quieras tocar eso.
fuente
¿Cómo vas a lograr la autenticación básica?
Si es un nombre de usuario / contraseña codificado y está utilizando la funcionalidad integrada de su servidor web para hacerlo, es probable que tenga un impacto casi nulo. Si está haciendo cosas locas en una base de datos o algo similar, entonces sí podría haber un impacto.
Como otros han señalado aquí, SSL y el envío de encabezados adicionales técnicamente harán las cosas más lentas, pero no serán significativas de ninguna manera.
fuente