En términos muy simples, ¿alguien puede explicar la diferencia entre OAuth 2 y OAuth 1?
¿OAuth 1 está obsoleto ahora? ¿Deberíamos implementar OAuth 2? No veo muchas implementaciones de OAuth 2; la mayoría todavía usa OAuth 1, lo que me hace dudar de que OAuth 2 esté listo para usar. ¿Lo es?
oauth
oauth-2.0
authorization
sullivan
fuente
fuente
Respuestas:
Eran Hammer-Lahav ha hecho un excelente trabajo al explicar la mayoría de las diferencias en su artículo Introducción a OAuth 2.0 . Para resumir, aquí están las diferencias clave:
Más flujos de OAuth para permitir un mejor soporte para aplicaciones no basadas en navegador. Esta es una crítica principal contra OAuth de las aplicaciones cliente que no estaban basadas en el navegador. Por ejemplo, en OAuth 1.0, las aplicaciones de escritorio o las aplicaciones de teléfonos móviles tenían que indicar al usuario que abriera su navegador al servicio deseado, autenticarse con el servicio y copiar el token del servicio nuevamente a la aplicación. La principal crítica aquí es contra la experiencia del usuario. Con OAuth 2.0, ahora hay nuevas formas para que una aplicación obtenga autorización para un usuario.
OAuth 2.0 ya no requiere que las aplicaciones cliente tengan criptografía. Esto se remonta a la antigua API de autenticación de Twitter, que no requería la aplicación de tokens HMAC y cadenas de solicitud. Con OAuth 2.0, la aplicación puede realizar una solicitud utilizando solo el token emitido a través de HTTPS.
Las firmas OAuth 2.0 son mucho menos complicadas. No más análisis, ordenación o codificación especiales.
Los tokens de acceso de OAuth 2.0 son de "corta duración". Por lo general, los tokens de acceso OAuth 1.0 se pueden almacenar durante un año o más (Twitter nunca los deja caducar). OAuth 2.0 tiene la noción de tokens de actualización. Si bien no estoy completamente seguro de cuáles son, supongo que sus tokens de acceso pueden ser de corta duración (es decir, basados en la sesión) mientras que sus tokens de actualización pueden ser "de por vida". Utilizaría un token de actualización para adquirir un nuevo token de acceso en lugar de que el usuario vuelva a autorizar su aplicación.
Finalmente, OAuth 2.0 está destinado a tener una separación limpia de roles entre el servidor responsable de manejar las solicitudes de OAuth y el servidor que maneja la autorización del usuario. Más información al respecto se detalla en el artículo mencionado.
fuente
Veo excelentes respuestas aquí, pero lo que extraño son algunos diagramas y, dado que tuve que trabajar con Spring Framework, encontré su explicación .
Los siguientes diagramas me parecen muy útiles. Ilustran la diferencia en la comunicación entre las partes con OAuth2 y OAuth1.
OAuth 2
OAuth 1
fuente
OAuth 2
y el paso 4 paraOAuth 1
.Las explicaciones anteriores son todas demasiado detalladas y complicadas de la OMI. En pocas palabras, OAuth 2 delega la seguridad al protocolo HTTPS. OAuth 1 no requería esto y, en consecuencia, tenía métodos alternativos para lidiar con varios ataques. Estos métodos requieren que la aplicación participe en ciertos protocolos de seguridad que son complicados y pueden ser difíciles de implementar. Por lo tanto, es más sencillo confiar en el HTTPS para la seguridad, de modo que los desarrolladores de aplicaciones no tengan que preocuparse por ello.
En cuanto a sus otras preguntas, la respuesta depende. Algunos servicios no quieren requerir el uso de HTTPS, se desarrollaron antes de OAuth 2 o tienen algún otro requisito que les impida usar OAuth 2. Además, se ha debatido mucho sobre el protocolo OAuth 2 en sí. Como puede ver, Facebook, Google y algunos otros tienen versiones ligeramente diferentes de los protocolos implementados. Entonces, algunas personas se quedan con OAuth 1 porque es más uniforme en las diferentes plataformas. Recientemente, el protocolo OAuth 2 se ha finalizado, pero todavía tenemos que ver cómo tomará su adopción.
fuente
Tenga en cuenta que existen serios argumentos de seguridad contra el uso de Oauth 2:
un artículo sombrío
y uno más técnico
Tenga en cuenta que estos provienen del autor principal de Oauth 2.
Puntos clave:
Oauth 2 no ofrece seguridad además de SSL, mientras que Oauth 1 es independiente del transporte.
en cierto sentido, SSL no es seguro porque el servidor no verifica la conexión y las bibliotecas comunes de clientes facilitan ignorar las fallas.
puede eliminar toda su seguridad, lo cual es mucho más difícil de hacer en OAuth 1.0:
fuente
La seguridad del protocolo OAuth 1.0 ( RFC 5849 ) se basa en el supuesto de que una clave secreta incrustada en una aplicación cliente puede mantenerse confidencial. Sin embargo, la suposición es ingenua.
En OAuth 2.0 ( RFC 6749 ), una aplicación de cliente tan ingenua se llama cliente confidencial . Por otro lado, una aplicación de cliente en un entorno donde es difícil mantener confidencial una clave secreta se llama cliente público . Ver 2.1. Tipos de clientes para más detalles.
En ese sentido, OAuth 1.0 es una especificación solo para clientes confidenciales.
" OAuth 2.0 y el camino al infierno " dice que OAuth 2.0 es menos seguro, pero no existe una diferencia práctica en el nivel de seguridad entre los clientes de OAuth 1.0 y los clientes confidenciales de OAuth 2.0. OAuth 1.0 requiere calcular la firma, pero no mejora la seguridad si ya se garantiza que una clave secreta en el lado del cliente puede mantenerse confidencial. La firma informática es solo un cálculo engorroso sin ninguna mejora práctica de seguridad. Es decir, en comparación con la sencillez que un OAuth 2.0 conecta el cliente a un servidor a través de TLS y se presenta solo
client_id
yclient_secret
, que no se puede decir que el cálculo engorroso es mejor en términos de seguridad.Además, RFC 5849 (OAuth 1.0) no menciona nada sobre redirectores abiertos, mientras que RFC 6749 (OAuth 2.0) sí. Es decir, el
oauth_callback
parámetro de OAuth 1.0 puede convertirse en un agujero de seguridad.Por lo tanto, no creo que OAuth 1.0 sea más seguro que OAuth 2.0.
[14 de abril de 2016] Además para aclarar mi punto
La seguridad de OAuth 1.0 se basa en el cálculo de la firma. Una firma se calcula utilizando una clave secreta donde una clave secreta es una clave compartida para HMAC-SHA1 ( RFC 5849, 3.4.2 ) o una clave privada para RSA-SHA1 ( RFC 5849, 3.4.3 ). Cualquiera que conozca la clave secreta puede calcular la firma. Por lo tanto, si la clave secreta se ve comprometida, la complejidad del cálculo de la firma no tiene sentido por compleja que sea.
Esto significa que la seguridad de OAuth 1.0 no se basa en la complejidad y la lógica del cálculo de la firma, sino simplemente en la confidencialidad de una clave secreta. En otras palabras, lo que se necesita para la seguridad de OAuth 1.0 es solo la condición de que una clave secreta pueda mantenerse confidencial. Esto puede sonar extremo, pero el cálculo de la firma no agrega mejoras de seguridad si la condición ya se cumple.
Del mismo modo, los clientes confidenciales de OAuth 2.0 confían en la misma condición. Si la condición se cumple ya, ¿hay algún problema en la creación de una conexión segura mediante TLS y el envío
client_id
yclient_secret
a un servidor de autorización a través de la conexión segura? ¿Hay alguna gran diferencia en el nivel de seguridad entre los clientes confidenciales OAuth 1.0 y OAuth 2.0 si ambos confían en la misma condición?No puedo encontrar ninguna buena razón para que OAuth 1.0 culpe a OAuth 2.0. El hecho es simplemente que (1) OAuth 1.0 es solo una especificación solo para clientes confidenciales y (2) OAuth 2.0 también ha simplificado el protocolo para clientes confidenciales y clientes públicos compatibles . Independientemente de si se conoce bien o no, las aplicaciones de teléfonos inteligentes se clasifican como clientes públicos ( RFC 6749, 9 ), que se benefician de OAuth 2.0.
fuente
Las firmas OAuth 2.0 no son necesarias para las llamadas API reales una vez que se ha generado el token. Tiene solo un token de seguridad.
OAuth 1.0 requiere que el cliente envíe dos tokens de seguridad para cada llamada a la API, y use ambos para generar la firma. Requiere que los puntos finales de los recursos protegidos tengan acceso a las credenciales del cliente para validar la solicitud.
Aquí se describe la diferencia entre OAuth 1.0 y 2.0 y cómo funcionan ambos.
fuente
OAuth 2 es aparentemente una pérdida de tiempo (de la boca de alguien que estuvo muy involucrado):
https://hueniverse.com/oauth-2-0-and-the-road-to-hell-8eec45921529
Él dice (editado por brevedad y en negrita para enfatizar):
fuente
Si necesita alguna explicación avanzada, debe leer ambas especificaciones:
https://oauth.net/core/1.0a/
https://oauth.net/2/
Si necesita una explicación clara de las diferencias de flujo, esto podría serle útil:
OAuth 1.0 Flow
OAuth 2.0 Flow
Fuente: https://codiscope.com/oauth-2-0-vs-oauth-1-0/
fuente
OAuth 2.0 promete simplificar las cosas de las siguientes maneras:
Fuente: http://blog.apigee.com/detail/oauth_differences
fuente
Desde el punto de vista de la seguridad, iría por OAuth 1. Vea OAuth 2.0 y el camino al infierno
cita de ese enlace: "Si actualmente está utilizando 1.0 con éxito, ignore 2.0. No ofrece ningún valor real sobre 1.0 (supongo que los desarrolladores de sus clientes ya han descubierto las firmas 1.0 por ahora).
Si es nuevo en este espacio y se considera un experto en seguridad, use 2.0 después de un examen cuidadoso de sus características. Si no es un experto, use 1.0 o copie la implementación 2.0 de un proveedor en el que confíe para hacerlo bien (los documentos API de Facebook son un buen lugar para comenzar). 2.0 es mejor para gran escala, pero si está ejecutando una operación importante, probablemente tenga algunos expertos en seguridad en el sitio para resolverlo todo por usted ".
fuente