Supongo que se refiere a un Flujo implícito OAuth 2.0 .
Creo que se está preguntando por qué necesita alejarse de su SPA para que el usuario autorice su aplicación (iniciando sesión y, por lo general, seleccionando los permisos para otorgar su solicitud).
OAuth, como protocolo, está diseñado para permitir que un tercero autentique la identidad de un usuario. Para usar Google OAuth como ejemplo, el usuario abandona su sitio y va a Google, por lo que no puede robar su contraseña ni realizar otras acciones en nombre del usuario. Abandonaron su sitio e ingresaron al sitio de su proveedor de identidad de confianza, en el que también confían implícitamente al permitirles autenticar la identidad de su usuario.
Si se está autenticando con su propio servidor, es posible que no sea necesario utilizar el protocolo OAuth. Solo permítales enviar su nombre de usuario y contraseña directamente. Ya confían en usted para manejar su nombre de usuario y contraseña al registrarse en su servicio.
Las únicas buenas razones que conozco para usar su propio proveedor de OAuth en su sitio son:
- Centralización de la identidad en una arquitectura de microservicios
- Exponer un proveedor de identidad para que lo utilicen terceros
- Usar una solución de software preempaquetada como proveedor de identidad, para que no tenga que utilizar su propia solución de identidad y autenticación.
Editar: Aquí hay un mejor recurso en el flujo implícito. RFC 6749 Sección 4.2
Y aquí hay un diagrama de ascii-art de cómo funciona el flujo implícito. Tenga en cuenta que el servidor de autorización es claramente una entidad separada en este diagrama, y que el paso de autenticación se dirige hacia este servidor.
+----------+
| Resource |
| Owner |
| |
+----------+
^
|
(B)
+----|-----+ Client Identifier +---------------+
| -+----(A)-- & Redirection URI --->| |
| User- | | Authorization |
| Agent -|----(B)-- User authenticates -->| Server |
| | | |
| |<---(C)--- Redirection URI ----<| |
| | with Access Token +---------------+
| | in Fragment
| | +---------------+
| |----(D)--- Redirection URI ---->| Web-Hosted |
| | without Fragment | Client |
| | | Resource |
| (F) |<---(E)------- Script ---------<| |
| | +---------------+
+-|--------+
| |
(A) (G) Access Token
| |
^ v
+---------+
| |
| Client |
| |
+---------+