Estoy desarrollando una aplicación para mi empresa con los siguientes parámetros & componentes:
- 1st Party Frontend Single-Page Application (SPA). Esto se implementa en TypeScript (un dialecto de JavaScript), y estamos desarrollando el código de forma interna.
- API REST de backend de 1st Party que da acceso a un MongoDB ubicado en otro lugar. Esto se implementa en JavaScript y utiliza Express que se ejecuta en el nodo. Estamos desarrollando el código en casa. En este momento, todo lo que esta pieza está haciendo es proporcionar operaciones CRUD sobre una API REST.
- Estas aplicaciones solo estarán disponibles para nuestros empleados . Todos los empleados tienen computadoras portátiles con Windows 10 que se han unido a Azure AD de nuestra compañía.
- No tenemos un servidor de ADFS en las instalaciones. Somos 100% de nube.
- La aplicación utilizará los recursos de Azure en su lógica empresarial, como Graph API.
- La aplicación también utilizará otros recursos de terceros, como Dropbox de nuestra empresa.
- La autenticación en "la aplicación" también debe autenticarse en todas las demás aplicaciones de terceros (como Dropbox) de la mejor manera posible.
- Hoy tenemos 10s de empleados. Es muy poco probable que tengamos más de 50 empleados en los próximos dos años, cuando esta aplicación vaya a la versión 2 y contrataré a alguien para construirla.
Ha llegado el momento de implementar la autenticación y autorización para nuestra aplicación. La aplicación debe autenticar y autorizar contra Azure AD. El escenario ideal es que un usuario conectado a la computadora portátil de la empresa debe autenticarse de forma automática en la aplicación, y que los usuarios de otra máquina (piense en el aeropuerto o en el quiosco del hotel) iniciarán sesión con sus credenciales de Azure AD .
Mi pregunta es en torno a qué flujo de concesión OAuth2 se debe usar en este escenario.
He leído una serie de artículos de Microsoft y OAuth, he leído varias clases de Udemy, etc. y he recibido consejos contradictorios de estas fuentes. Algunos sugieren que los SPA deben usar una concesión implícita, mientras que otros dicen que si hay lógica de negocios en un servidor backend (y hay / habrá), se debe usar una concesión de credenciales de cliente.
Soy un desarrollador con mucha experiencia, pero no soy un experto en seguridad. En mi mundo perfecto, externalizaría el diseño y la implementación de la pieza de autenticación de esta aplicación a alguien que sea un experto en seguridad, pero el presupuesto es una restricción importante aquí. Simplemente no es posible gastar miles de USD para que alguien nos construya esto en esta etapa.
Dicho todo esto, teniendo en cuenta el diseño y la arquitectura descritos anteriormente, ¿cómo se debe implementar la autenticación? ¿Qué flujo de subvención debería utilizarse?