¿Qué tan seguro es usar una configuración de AWS Cognito para un cliente?

¿Qué tal un genérico que se aplica a cualquier sistema de autenticación externo?

Déjame definir lo que es externo.

a) Servicio de autenticación como AWS Cognitor u Okta u otro proveedor de servicios de inicio de sesión que sea diferente / desconectado de su aplicación y servicios principales.

b) Su aplicación / servicio depende de los tokens emitidos por un proveedor de identidad: podría ser AWS cognito u otra cosa.

A su pregunta, ¿por qué se exponen las claves de configuración?

Oh, bueno, demos un paso atrás.

En una autenticación típica, envía un nombre de usuario y una contraseña a su servicio de autenticación y, a cambio, obtiene un token.

Aquí no hay una clave de configuración involucrada.

Pero cuando se está integrando con un Proveedor de Identidad externo (ya sea OAuth o no), usted (es decir, su cliente) tiene que establecerse como alguien en quien el Proveedor de Identidad puede confiar o al menos saber que es usted para que puedan enviar información adicional. de vuelta a su SERVIDOR (no al cliente).

Entonces, cuando la aplicación del cliente inicia la solicitud de autenticación, se identifican con un ID de cliente público y una clave secreta o API, de modo que AWS Cognito o que interactúa directamente con el inicio de sesión de Google puede proporcionar la página de inicio de sesión, autenticarse y luego enviarle un “Código de autorización”.

El código de autorización solo se envía al lado del servidor. (Cuando dice Sin servidor, simplemente no está administrando el servidor subyacente … pero hay un servidor ejecutándose en alguna parte …) y el lado del servidor intercambiará el código de autorización para el Token de acceso.

Entonces, nada de lo que vea en el lado del cliente debería ser terrible. Realmente no puede ocultar esto, por lo tanto, se llama Clientes públicos.

¿Ahora hay implementaciones seguras? Sí definitivamente. Un caso de uso común es cuando una aplicación cliente quiere conectarse a múltiples servicios y se supone que es un “cliente privado / confidencial”, termina exponiendo la identificación y el secreto del cliente.

Entonces, cada vez que desee un token de acceso en el Cliente / UI, puede obtener el consentimiento del usuario e intercambiar el código de autorización para el token de acceso (e intentar mantenerlo en el lado del servidor) o tener un servicio proxy que puede tomar un token existente (puede ser token de sesión web o token de acceso) y devuelva su token para el servicio de terceros.

Espero que esto ayude.

(por contexto, estoy hablando de grupos de usuarios de cognito / proveedor de identidad, internamente llamado cognito-idp):

Tiende a ser muy seguro. Déjame explicarte por qué, según mi experiencia:

  • Lo más probable es que ADMIN_NO_SRP realice los intercambios de contraseñas (a un servidor del lado del servidor, y requiere AWS Security para invocarlo) y / o utilizando el Protocolo SRP. Lo más probable es que las aplicaciones de una sola página de las que habla tienden a confiar en el protocolo SRP, ya que son … sin servidor (eh)
  • SRP significa “Contraseña remota segura”. Como tal, es un mecanismo de respuesta desafío / resumen basado en una criptografía fuerte. Solo AWS conoce la contraseña correcta y sus controles siguen la seguridad de AWS (para obtener una descripción general, consulte este enlace)
  • En este punto, debe comprender que hay cifrado tanto en tránsito como en reposo.
  • También puede fortalecerlo aplicando un secreto de cliente al configurar su aplicación. Por lo tanto, siempre que proporcione un nombre de usuario, también debe aplicar un hash secreto para validar al cliente. Podría ser útil o no (en realidad es mucho cuando se usa ADMIN_NO_SRP)
  • Por defecto, cognito requiere que el usuario valide su correo electrónico / número de teléfono (puede anularlo, pero no es realmente recomendable). Se utilizará en caso de un acceso MFA o una recuperación de cuenta. Por lo tanto, todas y cada una de las transacciones que requieren la intervención de su usuario (como una contraseña perdida) efectivamente requieren que primero se valide su correo electrónico y su número de teléfono (es por eso que no lo recomendamos), para recuperar su cuenta. Entonces la cuenta de usuario es tan segura como su teléfono / correo electrónico.
  • También puede permitir que los usuarios especifiquen un dispositivo al iniciar sesión, lo que les permite registrarse individualmente desde sus dispositivos (piense en un teléfono móvil robado)
  • Cognito también rastrea fallas de contraseña, bloqueando efectivamente a los usuarios para que no intenten iniciar sesión una vez que alcanza un cierto umbral.
  • Además, puede agregar desafíos de seguridad adicionales por medio de Lambdas. Una posibilidad es requerir que el usuario envíe un segundo token de autenticación (como un pin de seguridad y / o un código TOTP)

Yo diría que Cognito es bastante seguro, si consideramos los posibles factores de riesgo.

Por supuesto, siempre está el MOSSAD, por lo que no puedo responder por su seguridad 🙂

AWS realmente apunta al desarrollo de aplicaciones móviles donde la infraestructura de seguridad no es un ciudadano de primera clase. Es ideal para lugares que usan tokens y se han dado cuenta de que realmente no se están manejando tan bien.

Cognito es lo suficientemente bueno para muchas aplicaciones móviles. Por supuesto, no lo usaría para algo como una banca en línea o una aplicación de atención médica donde solo la seguridad seria es una opción.

Todavía es necesario leer detenidamente la documentación de AWS y seguir sus pautas de desarrollo. Como la mayoría de las cosas, si se usa mal es explotable.

No seguí su enlace, pero si tienen las claves secretas expuestas, eso no estaría siguiendo las pautas de AWS. Eso es similar a otras cosas que he visto como poner contraseñas en archivos de texto sin formato en un servidor web Apache. Es vergonzoso lo común que fue. Estas tonterías no significan que apache no sea seguro. Simplemente significa que un ingeniero necesita poder para encontrar un trabajo en el que sea bueno.

Con solo un poco de cuidado, uno puede usar cognito para hacer un buen trabajo sin mucho trabajo o infraestructura.

Creo que AWS está proporcionando un excelente servicio para la mayoría de los tipos de organizaciones que necesitan ayuda para elevar su juego de seguridad de aplicaciones móviles.

Probablemente nunca lo usaré en mi rol empresarial actual, pero no tendría miedo de usarlo si tuviera un horario parcial para una startup.

More Interesting

¿Qué es Cloud y Windows Azure? ¿Es seguro ejecutar aplicaciones en la nube?

¿Cuál es la forma correcta de guardar mi sitio web (como, por ejemplo, en una unidad USB o en un sitio de 'nube' de terceros)?

¿Cuáles son los pros y los contras del uso de herramientas en la nube frente a la infraestructura local para el almacenamiento de grupos pequeños (8-15), el control de origen y la gestión de la información?

¿Cómo puede ser beneficiosa la computación grid? ¿Cuáles son algunos ejemplos?

¿Qué significa en realidad el reciente anuncio de Amazon Web Services sobre el precio de sus instancias reservadas EC2?

¿Quiénes son los mejores creadores de aplicaciones móviles basadas en la nube?

¿Cuáles son los casos prácticos de aplicación / uso de map reduce / hadoop en la nube o en un entorno distribuido?

¿Qué es big data, computación en la nube y análisis de datos?

¿Hay alguna posibilidad de que todos mis datos almacenados en el almacenamiento en la nube se pierdan debido a problemas técnicos (irrecuperables) por parte del proveedor? Si es así, ¿puedo demandar al proveedor por ello?

En estos días de Elastic Cloud Computing, ¿cómo se pueden configurar los sitios web para que no se bloqueen por sobretensiones repentinas en el tráfico?

¿Necesita un servidor dedicado / VPS / hosting en la nube?

Cómo hacer la aversión de disco de RDS

¿Cuál es el medio más denso para el almacenamiento de datos?

¿Alguien ha usado servicios basados ​​en la nube?

Como resultado del intercambio de información a través de la web, ¿podemos cuantificar la cantidad de papel, árboles y otras materias primas ahorradas por la impresión y el envío de esta información?