Conceptos importantes
- Autentificación: Proceso de verificar la identidad de una persona.
- Autorización: proceso de permitir el acceso de una persona a un sistema.
- Credenciales: El juego de artefactos usados para proveer la identidad a un cliente.
Introducción
En la historia de la física Albert Einstein resolvió las 3 preguntas que hasta ese momento quitaban el sueño a los físicos de finales del siglo IX y principios del siglo XX, pero al hacerlo dejo al descubierto muchos nuevos desafíos para los físicos modernos.
De una manera análoga, los Web Services vinieron a solucionar los 3 problemas fundamentales de la interoperabilidad de sistemas. Esta tecnología resolvío los problemas de descripción de los contratos de los servicios (WSDL), la invocación de procedimientos (SOAP) y la interoperabilidad entre plataformas (Uso de XML). Al utilizar está solución, los desarrolladores se enfrentaron a nuevos problemas generados por el uso de está tecnología. Algunos ejemplos de los esos problemas son seguridad, desempeño, manejo de contextos trasnacionales y confiabilidad, por nombrar algunos.
En esté articulo revisaremos los conceptos más importantes de seguridad en Web Services. Abordaremos los patrones de autentificación y protección de mensajes.
Patrones de autentificación
Los patrones de autentificación tienen como objetivo guiarnos en las decisiones de la aproximación con que nuestro sistema enfrentará el problema de la autentificación de los clientes que quieren usar los recursos expuestos por nuestros servicios.
En está sección veremos dos patrones fundamentales:
- Autentificación directa
- Autentificación indirecta (Brokered Authentication)
Ambas alternativas buscan solucionar el problema de identificación del cliente que hace uso de los recursos del Servicio Web. Cuando el cliente y servidor tienen una relación de confianza que les permite intercambiar y validar credenciales donde se incluye el password, el patrón de autentificación directa aplica perfectamente.
En un escenario en que el cliente y el servidor no tienen una relación de confianza, el camino es utilizar autentificación indirecta. En esta opción el cliente se autentifica contra un tercero (Broker) quien le entrega un Token al cliente para que lo entregue al Servicio cómo credencial. El Web Service toma el Token y lo valida con el Broker. Este tercero, llamado Broker, tiene relaciones de confianza con el cliente y el servidor.
Además de la razón de compartir relaciones de confianza entre el cliente y el servidor existen múltiples criterios que se deben tener en cuenta para la toma de decisión de cuál aproximación utilizar para la autentificación de los Web Services. Algunos de los criterios que se deben considerar al momento de evaluar son:
- ¿Qué necesita el servicio para autentificar al cliente? ¿Password? ¿Certificados? ¿Algo más?
- ¿El Web Services es capas de acceder al servicio de autentificación directamente?
- ¿Cuál es la infraestructura existente?
- ¿Es necesario soportar SSO?
- ¿Necesita la aplicación un contexto de sesión?
- ¿Estamos trabajando en el mundo Microsoft? ¿Tenemos Windows Impersonate?
Estas preguntas y más se deben tener en cuenta al momento de optar por un patrón de autentificación.
Autentificación directa
El escenario de la autentificación directa es que el Servidor Web espera del cliente las credenciales que él mismo validará con el servicio de autentificación (Identity Store).
El problema de está aproximación es el cómo el Servicio Web validará las credenciales presentadas por el cliente.
Las principales razones para utilizar autentificación directa son:
- Las credenciales presentadas por el cliente al Servicio Web son basadas en un secreto compartido, por ejemplo un password.
- El Servicio Web tiene capacidad para validar credenciales contra un servicio de autentificación.
- El Servicio Web es simple y no necesita SSO o soporte para asegurar la no repudiación.
- EL cliente y el Servicio Web confían uno en el otro en el manejo de seguro de credenciales.
Se puede utilizar autentificación directa cuando el Servicio Web actúa cómo un servicio de validación de las credenciales del cliente. Las credenciales usadas, que se aceptan por el hecho de poseerlas (proof-of-possession), están basadas en un secreto compartido y son verificables contra un Identity Store.
Los participantes de este patrón de autentificación son los siguientes:
- Cliente: Aplicación que accede al Servicio Web, entrega las credenciales para la autentificación.
- Servicio Web: Web Services que requiere las credenciales para el uso de sus recursos.
- Identity Store: Es la entidad que almacena las credenciales de los clientes.
El siguiente Diagrama muestra la secuencia de mensajes que se intercambian en entre los participantes de este patrón de autentificación.
Ilustración 1: Mensajes del patrón de autentificación directa.
Los beneficios del uso del patrón de autentificación directa son:
- Simpleza.
- Si existe un problema de seguridad en la relación de confianza del cliente y Servidor, sólo compromete a este cliente y servidor y no a todo un modelo.
Las consecuencias resultantes del uso de autentificación directa son:
- Este modelo no permite el uso de SSO, lo que implica el paso de credenciales en cada llamada. Es posible sortear este asunto con cache de credenciales, pero si las credenciales son del tipo password está solución implica problemas de seguridad.
- Si se comienzan ha crear muchos servicios Web, el sistema se vuelve muy complejo porque las relaciones de confianza entre clientes y servidores son punto a punto, dificultando las labores administrativas del sistema.
- Si un cliente llama muchas veces al mismo servicio, el desempeño que obtiene es pobre porque cada vez el Servicio Web debe validar contra el Identity Store.
- Las credenciales de un cliente deben estar replicadas en todos los Identity Store, lo que lleva a tener actividades de sincronización y actualización.
Algunas consideraciones de seguridad que se deben observar al momento de implementar autentificación directa son:
- Es posible que ataques al canal entre el cliente y el Servidor Web puedan obtener las credenciales del cliente y atacar el servidor usando esas credenciales.
- El Identity Store puede ser foco de un ataque, con el objetivo de obtener las credenciales, por ejemplos password guardados en texto plano.
- El cliente puede implementar un Cache de Login y Password para entregarlos en cada requerimiento. Esto es un foco de riesgo de seguridad.
Autentificación indirecta
………………continuará……