OAuth 2 Tipo de concesión implícita para el SPA de primera persona: la forma más segura y sensata

1

Mi objetivo es asegurar mi API sin estado y solo permitir que los clientes registrados (SPA) consuman mis recursos. No habrá clientes de terceros en mi escenario.

Sé que la autorización Oauth 2 con tipo de concesión implícita se recomienda para clientes públicos (en mi situación, un SPA). He leído muchas cosas sobre eso, pero no pude entender algunos puntos, así que le pido su ayuda:

  1. ¿Crees que Oauth 2 con un tipo de concesión implícita es la mejor manera de lograr esto? Sé que el tipo de concesión de credenciales de contraseña no es seguro para las SPA, ya que no pueden mantener la confidencialidad de un secreto de cliente. Entonces, ¿debo ir con Oauth 2 con el tipo de concesión implícita?

  2. En Oauth 2, puedo usar el tipo de concesión implícita con aprobación automática, por lo que ya no es necesario obtener el consentimiento de los usuarios. Pero al pensar en mi SPA como una aplicación de primera mano, no quiero que ningún usuario redirija a ninguna parte para iniciar sesión y volver a la página de SPA.

¿Crees que es seguro y sensato habilitar la autenticación básica http para mi API, por lo que mi primera aplicación podría obtener las credenciales de los usuarios y agregarlas al encabezado de autorización y enviarlas a mi servidor de Autorización a través del canal SSL / TLS para autenticar y obtener el token de acceso?

Si no es apropiado, ¿qué recomienda para lograr este objetivo?

  1. También quiero que los usuarios no autenticados consuman algunos recursos en mi SPA; Debería hacer públicos esos recursos para cualquier cliente y cualquier usuario (en realidad no lo prefiero) o esperar que SPA se autentique y autorice con un usuario anónimo ficticio para obtener un token de acceso con privilegios anónimos para consumir recursos de API públicos.

  2. Para un sitio web similar a Wikipedia, ¿cuánto tiempo debe tardar en caducar un token de acceso?

  3. Cuando caduque, ¿qué método debo seguir? No hay token de actualización en el tipo de concesión implícita OAuth 2. ¿Debo pedir a los usuarios que ingresen sus credenciales nuevamente (esto no es fácil de usar) o almacenar sus credenciales en un almacenamiento y enviarlas a un servidor de autorización en silencio para obtener un nuevo token de acceso?

pregunta Selçuk Işık 14.10.2018 - 15:05
fuente

1 respuesta

1

En su caso, creo que OAuth 2 no tiene sentido. Está diseñado para manejar clientes de terceros, y es probable que la complejidad adicional sea una distracción cuando solo tiene un cliente de primera persona.

Para seguridad del usuario :

  • No importa lo que hagas, una aplicación basada en web es aquella en la que el usuario tiene que confiar en alguna página web tuya con su nombre de usuario / contraseña. Por esta razón, parece sensato simplemente autenticar el nombre de usuario + contraseña y omitir OAuth 2, a menos que tenga alguna otra razón para usar OAuth 2.
  • Para los recursos visibles públicamente, permitir el acceso sin autenticación debería estar bien.

Para que la seguridad de su API sea utilizada solo por su SPA :

  • Este es un problema completamente diferente al inicio de sesión del usuario, y recomiendo no desviarse por cómo adquirir tokens de acceso. Por ejemplo, muchos SPA pueden ser modificados / descompilados / falsificados trivialmente.
respondido por el Ethan Kaminski 14.10.2018 - 16:34
fuente

Lea otras preguntas en las etiquetas