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
y client_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
y client_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.