Acceso seguro a la API a través de SSL usando un touth outh

1

En el proyecto en el que estoy trabajando actualmente, autentificamos el Clientes por nombre de usuario y contraseña. En este sistema, cada usuario tiene una clave que se calcula a partir de su contraseña.

Sin embargo, queremos proporcionar un acceso a la API para los usuarios en los que estarán Autenticado con un token jurado 2.0. Entonces, el problema que estoy enfrentando es que necesitamos la contraseña para calcular la clave y queremos evitar que el usuario codifique su contraseña. Entonces, lo que hemos pensado es que cuando el usuario solicita el token y el servidor cifra y firma la clave del usuario y la envía de vuelta al usuario junto con el token. En cada solicitud de API el usuario tiene que enviar ambos! Teniendo en cuenta que todas las comunicaciones se realizan a través de HTTPS, siempre existe la posibilidad de que haya un ataque del lado del cliente en el que el atacante pueda capturar tanto la clave cifrada como el token y reproducirlas utilizando las mismas llamadas de API.

La solución que se me ocurrió es la siguiente:

¡La clave cifrada debe contener una fecha de caducidad (esta fecha también debe incluirse en la firma)! El problema que queda aquí es cómo actualizaremos la clave cifrada si asumimos que el usuario no se conectará durante un período prolongado. Por otra parte, para evitar el rechazo y la prevención de ataques de repetición, solicitamos la firma del lado del cliente (utilizando HMAC o RSA) sobre el token y la contraseña cifrada.

Entonces, mi pregunta aquí es si pedirle al usuario que firme el token y la contraseña cifrada es demasiado e innecesario.

Gracias

    
pregunta sgres 17.09.2013 - 16:00
fuente

1 respuesta

1

Si su back-end requiere la contraseña de texto simple, ¿por qué no cachear la contraseña en un servidor proxy de API seguro?

  client --- oauth---> [Data Center] ---> HTTP/S ---> App that caches passwords ---> backend

Hay muchas formas de hacer OAuth 2.0, y sugeriría usar el token normal que ya incluye los campos de caducidad, alcance y firma.

Simplemente use el ID de usuario verificado que viene del token de OAuth para dictarle a su proxy en el back-end qué llamadas debe hacer.

En mi opinión, esta arquitectura centraliza la seguridad, reduce la complejidad y permite una mejor capacidad de prueba.

    
respondido por el random65537 17.09.2013 - 17:08
fuente

Lea otras preguntas en las etiquetas