por example basada autenticacion authentication oauth oauth-2.0 access-token jwt

authentication - basada - json web token example



¿Cuál es la diferencia entre la autenticación basada en OAuth y basada en token? (3)

OAuth es una especificación para autorización, no autenticación

OAuth 2.0 es una especificación para la autorización, pero NO para la autenticación. RFC 6749, 3.1. El punto final de autorización dice explícitamente lo siguiente:

El punto final de autorización se utiliza para interactuar con el propietario del recurso y obtener una concesión de autorización. El servidor de autorización DEBE verificar primero la identidad del propietario del recurso. La forma en que el servidor de autorización autentica al propietario del recurso (por ejemplo, nombre de usuario y contraseña de inicio de sesión, cookies de sesión) está fuera del alcance de esta especificación .

Solo use OAuth si desea dar acceso a un servicio de terceros a sus API. Incluso cuando esté utilizando OAuth, necesitará algún tipo de autenticación (basada en token o basada en sesión, etc.) para autenticar los usos. OAuth no está diseñado para la autenticación.

mira esta question

Pensé que OAuth es básicamente una especificación de autenticación basada en token, pero la mayoría de las veces los marcos actúan como si hubiera una diferencia entre ellos. Por ejemplo, como se muestra en la imagen a continuación, Jhipster pregunta si usar una autenticación basada en OAuth o basada en token.

¿No son estos lo mismo? ¿Cuál es exactamente la diferencia ya que ambos incluyen tokens en sus implementaciones?


Cuando solicita un recurso del servicio web seguro, puede proporcionar un token de autenticación en la llamada. El token actúa como "código secreto" para acceder al recurso.

OAuth es solo un tipo específico de método de autenticación basado en token.


Esta es una buena pregunta: hay mucha confusión sobre los tokens y OAuth.

En primer lugar, cuando menciona OAuth, es probable que se refiera al estándar OAuth2 . Esta es la última versión del protocolo OAuth, y es de lo que la mayoría de la gente habla específicamente cuando dicen ''OAuth''.

El protocolo OAuth admite varios tipos diferentes de autenticación y autorización (4 para ser precisos).

En segundo lugar, el protocolo OAuth funciona mediante la autenticación de usuarios a través de tokens. La idea aquí es esta:

En lugar de que su usuario envíe sus credenciales reales a su servidor en cada solicitud individual (como lo harían con la autenticación básica, donde un usuario envía su nombre de usuario / contraseña al servidor para cada solicitud), con OAuth primero intercambia sus credenciales de usuario por ''token'', y luego autenticar usuarios basados ​​en este ''token''.

La idea de OAuth es que al exigir a los usuarios que pasen sus credenciales confidenciales por la red con menos frecuencia, pueden ocurrir menos cosas malas. (Esta es la idea, de todos modos).

Ahora, aquí es donde entran en juego los tokens: la especificación OAuth se basa en el concepto de tokens, pero NO ESPECIFICA LO QUE ES UN TOKEN.

En el sentido más "general", un token es solo una cadena que identifica de forma exclusiva a un usuario. Eso es.

La gente se dio cuenta de esto y desarrolló un nuevo estándar para crear tokens, llamado el estándar JSON Web Token . Este estándar básicamente proporciona un conjunto de reglas para crear tokens de una manera muy específica, lo que hace que los tokens sean más útiles para usted en general.

Los JWT te permiten hacer cosas como:

  • Firme criptográficamente un token para que sepa que un token no fue manipulado por un usuario.
  • Cifre los tokens para que el contenido no se pueda leer en texto sin formato.
  • Incruste datos JSON DENTRO de una cadena de token de forma estándar.

Ahora, en su mayor parte: casi todos en la comunidad de desarrollo han acordado que si estás usando algún tipo de OAuth, entonces los tokens que estás usando deberían ser JSON Web Tokens.

==========

¡OKAY! Ahora que hemos cubierto la historia de fondo, déjame responder tu pregunta.

La elección que está haciendo arriba es si desea habilitar o no la especificación completa de OAuth2 para autenticación / autorización (que es bastante compleja), o si simplemente desea alguna ''autenticación de token'' básica.

Debido a que el protocolo OAuth proporciona múltiples formas diferentes de autenticar de una manera que CUMPLE CON LOS ESTÁNDARES, agrega mucha complejidad a la mayoría de los sistemas de autenticación.

Debido a esto, muchos marcos ofrecen una versión ''simplificada'' del flujo OAuth2 Password Grant, que es esencialmente un método simple donde:

  • Un usuario envía su nombre de usuario / contraseña a su servidor en alguna URL como / login.
  • Su servidor genera un token JWT para el usuario.
  • Su servidor devuelve ese token al usuario.
  • El usuario almacena este token en sus cookies, dispositivo móvil o posible servidor API, donde lo utiliza para realizar solicitudes.

Nuevamente: el flujo anterior NO es compatible con OAuth, pero es una versión un poco más simple que TODAVÍA usa tokens.

El punto principal aquí es que los tokens (JWT) son generalmente útiles, y NO DEBEN emparejarse con el flujo de OAuth.

Me doy cuenta de que este es un muro de texto, pero espero que responda su pregunta con más profundidad =)