¿Cómo autenticar mejor un cliente de escritorio con un backend escalable a través del servicio SOAP / REST?

1

Estoy tratando de encontrar una arquitectura sólida para autenticar usuarios en una base de datos. Tengo un cliente de juegos, con el que planeo atender una solicitud. El transporte realmente no importa, pero en este momento estoy pensando en http y aprovechando SSL o ws-security para garantizar el cifrado de datos a través del cable.

Me gustaría evitar los ataques de intermediarios si es posible, así que me inclino por la seguridad de Ws aunque sé que cuesta más gastos generales.

En el lado del servicio, me gustaría usar un marco de autenticación como enlace - para autenticar a los usuarios contra una base de datos mysql. No estoy seguro de si puedo aprovechar las características de la sesión o no, ya que no lo he buscado, pero sería genial si pudiera.

Probablemente será una combinación de almacenamiento de información de la sesión en la base de datos y si puedo aprovechar las características de la sesión de Shiro, eso es una ventaja.

Mi pregunta real es el apretón de manos entre el cliente y el servidor. ¿Si utilizo ws-security no me cuido todo eso? ¿Solo eso hace que valga la pena?

Si no, ¿qué debo hacer aquí? Quiero asegurarme de que todas las solicitudes del cliente estén autenticadas, pero tampoco quiero tener que saltar a través de los aros para que esto suceda. ¿Funcionaría aquí algo tan simple como la autenticación de resumen de http?

Una de las restricciones que tengo es el acceso a las bibliotecas. Si no es gratis y no se puede utilizar en un producto comercial, entonces no puedo aprovecharlo. Mi cliente se escribirá en C ++ y puedo usar el lenguaje que sea más fácil (me inclino hacia java) para que suceda en el lado del servidor.

Planeo agregar soporte para que los usuarios compren artículos en el juego a través de micropagos en el futuro, por lo que este mecanismo de saludo definitivamente debe ser seguro.

Sigo oyendo que las personas sugieren REST + SSL, y para examinar enlace

¿Es esa una alternativa viable? Si usara eso + algo como Apache Shiro, ¿tendría un ganador?

Lo que sea que use, debe ser escalable ya que el sistema crecerá con los usuarios / volumen de solicitudes a lo largo del tiempo.

    
pregunta 19.01.2012 - 04:47
fuente

1 respuesta

1

SSL no es vulnerable a MITM, a menos que la máquina cliente tenga certificados CA raíz maliciosos instalados (en cuyo caso no puede hacer nada en absoluto, ya que podría suponer que todo el cliente está comprometido). Si obtiene un certificado de una CA adecuada, como Verisign , se le asegurará que cualquier comunicación con su servidor será segura. (excepto en situaciones académicas como la computación cuántica). Si usa un canal encriptado durante la fase de autenticación, puede usar cualquier paradigma de comunicación / serialización que desee (REST, Protobuf, etc.).

En otras palabras, todo lo que necesita hacer al final del día es asegurarse de que las contraseñas estén incluidas en su base de datos, en su base de datos, preferiblemente de doble sala para que la funcionalidad de "recordar contraseña" de su cliente pueda almacenar un hash con sal en el disco duro en lugar de una contraseña de texto simple.

Alternativamente, puedes mirar en:

  • SRP que no es necesario que ocurra en un medio seguro.
  • TLS / SSL autenticados mutuamente (utilizando un certificado de cliente). Lo bueno de esto es que permite escenarios sin conexión (LAN) ya que los clientes pueden autenticarse entre sí sin la presencia de su servidor de autenticación.

WS-Security está orientado principalmente hacia servicios federados, es decir, a través de la empresa (como la mayoría de las extensiones WS-I), lo que probablemente no sea una preocupación para usted. En cualquier caso, WS-Security tiene la sobrecarga asociada de SOAP (y los marcos subyacentes / reorganización necesarios para manejar las llamadas SOAP). SOAP es un protocolo muy pesado y probablemente sea una opción muy muy pobre para el desarrollo de juegos. Yo evitaría esto por completo.

    
respondido por el Jonathan Dickinson 19.01.2012 - 09:41
fuente

Lea otras preguntas en las etiquetas