Estoy creando una Aplicación de una sola página (SPA) y una RESTful API . La API necesita seguridad: ciertos usuarios solo pueden hacer llamadas a ciertos puntos finales. Tengo un proveedor de identidad externo (IdP (Okta)) con el que quiero que el usuario se autentique utilizando el protocolo OpenId Connect . Estoy tratando de aclarar los pasos correctos para la autenticación y autorización del SPA a la API RESTful. Los dos flujos que he estado observando son el flujo del código de Autorización y el flujo Implícito.
Si tuviera que ir con Flujo implícito , los pasos serían:
- El usuario visita el SPA, que lo redirige al IdP para iniciar sesión.
- Una vez que el usuario inicia sesión, el IdP lo devuelve al SPA con un token de acceso y un token de ID.
- (Este es el paso del que no estoy seguro) Cada vez que el SPA realiza una solicitud a la API RESTful, pasa el token de acceso y el token de ID junto con la solicitud, que la API RESTful valida y luego comprueba que el usuario tiene autoridad para acceder al punto final en particular. Si lo hace, devuelve el resultado, de lo contrario, el usuario no está autorizado.
Si tuviera que ir con el flujo de código de autorización , los pasos serían:
- Igual que el paso 1 anterior.
- Una vez que el usuario inicia sesión, el IdP lo devuelve al SPA con un código de autorización.
- (De nuevo, el paso no estoy seguro es correcto) Cada vez que el SPA realiza una solicitud a la API RESTful, pasa el código de autorización junto con la solicitud, que la API RESTful luego intercambia (junto con un secreto del cliente) con el IdP para un token de acceso y un token de ID. Los utiliza para comprobar si el usuario puede acceder a un punto final en particular. Si lo hace, devuelve el resultado, de lo contrario no están autorizados.
Creo que el flujo implícito es el que se usa en este escenario, pero ¿tengo los pasos correctos? Particularmente el paso 3, el envío de dos fichas en cada solicitud, no parece correcto. Pero creo que necesito ambos tokens para validar y determinar el usuario. Ayuda apreciada!