JWT vs. certificados de cliente

6

Tenemos un servidor de transacciones que está conectado a través de diferentes aplicaciones cliente. El requisito es tener un medio seguro de autenticación para que las aplicaciones cliente se comuniquen con el servidor de transacciones. Las dos soluciones que se están analizando son JWT y certificados de cliente.

En su opinión, ¿cuáles son las ventajas y desventajas de cualquiera de las opciones desde un punto de vista de seguridad y eficiencia? Me doy cuenta de que esta pregunta es un poco genérica y eso es específicamente porque queremos obtener algunas ideas más generales antes de pasar a una solución específica considerando que estos componentes aún están en desarrollo.

¡Cualquier consejo de aquellos que hayan usado cualquiera de estas tecnologías sería apreciado!

    
pregunta Nixman55 24.06.2016 - 18:20
fuente

2 respuestas

2

Para un poco de contexto, he trabajado mucho con la autenticación basada en token de JWT, pero tengo poca experiencia con los certificados de clientes, por lo que mi respuesta tendrá un sesgo (información y opinión) respecto de JWT.

JWT Token Pros:

  • Se puede generar (o volver a generar) fácilmente y puede incluir fechas / horas de caducidad para reducir el daño debido a un token JWT robado
  • Puede incluir "reclamos" en la carga útil para llevar información adicional, tal vez la función del dispositivo cliente o, literalmente, cualquier par clave-valor que desee
  • Es fácil de transportar ya que una vez codificados, son solo una cadena
  • La gran mayoría de los idiomas tienen bibliotecas para hacer la mayoría del trabajo pesado. Consulte: página de bibliotecas

Contras de token de JWT:

  • Por lo general, necesitará un servidor de autenticación o un módulo en su servidor de Transacción para dispensar estos
  • Las cosas pueden ser muy complicadas o imposibles dependiendo de cómo su cliente necesita autentificarse. Siempre que el usuario tenga credenciales de inicio de sesión, está bien, ya que se pueden usar para autenticar inicialmente al cliente antes de enviar el token JWT. De lo contrario, necesita algunos medios para confirmar inicialmente la autenticidad del cliente

Pros de certificados de cliente:

  • Requiere que se instale un solo certificado (¿en el momento de la configuración? Solo depende) una vez
  • No requiere ningún código del lado del servidor para crear y distribuir certificados de la misma manera que JWT

Contras del cliente Contras:

  • Si un certificado está comprometido alguna vez, puede usarse en ataques de estilo de reproducción mientras sea válido (y no se descubra que esté comprometido, de lo contrario podría estar en la lista negra)
  • Requiere un punto de almacenamiento permanente seguro en el dispositivo cliente. A diferencia de los tokens JWT que podrían almacenarse de manera segura en la memoria y finalmente destruirse en el momento en que se cerró el cliente o se cerró la aplicación, el certificado debería guardarse de forma persistente en una ubicación segura. Dependiendo de qué es exactamente el cliente, esto puede ser muy difícil o imposible

Mi opinión: los tokens JWT son un método seguro y estandarizado de autenticación de clientes y lo recomendaría.

    
respondido por el dFrancisco 30.01.2018 - 17:03
fuente
0

Esto no se puede responder sin entender mejor su entorno.

  • ¿Todo esto está dentro de su propio dominio o están estos externos conectados a su servicio?
  • ¿Estos servicios requieren un conjunto diferente de permisos entre sí?
  • ¿Se utilizan estos servicios para delegar una identidad de usuario que se usa en sentido descendente?
  • ¿Cómo se comunican estos servicios entre sí? ¿DESCANSO? Binario?
  • ¿Cuál es la pila de tecnología con la que está trabajando?

Los certificados de cliente son útiles como una forma de autenticación, pero si su requisito es tener permisos diferentes para los servicios que acceden a su propio servicio, un certificado de cliente por sí solo no ayudará. Como se mencionó anteriormente, deberá administrar los certificados que haya emitido, pero este acuerdo existe con los JWT que también requieren firma. Si tienes varios certificados para externos, lo harás

Los JWT son útiles si los consumidores tienen permisos diferentes y están accediendo a su servicio a través de REST. Si la comunicación no es REST, no se moleste con JWT. También deberá administrar el certificado de firma en JWT. Si va a utilizar JWT, tenga en cuenta las debilidades que tienen:

  • Ataques de algoritmos contra bibliotecas que respetan el valor ninguno
  • ataques de reproducción JWT
  • Los JWT requieren TLS en la capa de transporte
  • Algunos marcos JWT le permiten atacar el sistema cambiando los tipos de algoritmos de RS256 a HS256 y firmando con la clave pública

No hay nada de malo con los JWT cuando se implementan correctamente, solo la gente puede arruinar la implementación de JWT. Tengo sesgo porque actualmente estoy tratando de abordar los patrones de JWT en mi propia organización que llevan a brechas de seguridad porque la validación ignoró las fechas de caducidad ...

    
respondido por el McMatty 30.01.2018 - 22:19
fuente

Lea otras preguntas en las etiquetas