Die Sicherheit des OAuth 1.0-Protokolls ( RFC 5849 ) basiert auf der Annahme, dass ein in eine Clientanwendung eingebetteter geheimer Schlüssel vertraulich behandelt werden kann. Die Annahme ist jedoch naiv.
In OAuth 2.0 ( RFC 6749 ) wird eine solche naive Clientanwendung als vertraulicher Client bezeichnet. Andererseits wird eine Clientanwendung in einer Umgebung, in der es schwierig ist, einen geheimen Schlüssel vertraulich zu behandeln, als öffentlicher Client bezeichnet. Siehe 2.1. Client-Typen für Details.
In diesem Sinne ist OAuth 1.0 eine Spezifikation nur für vertrauliche Clients.
" OAuth 2.0 und der Weg zur Hölle " besagt, dass OAuth 2.0 weniger sicher ist, es jedoch keinen praktischen Unterschied in der Sicherheitsstufe zwischen OAuth 1.0-Clients und vertraulichen OAuth 2.0-Clients gibt. OAuth 1.0 erfordert die Berechnung der Signatur, erhöht jedoch nicht die Sicherheit, wenn bereits sichergestellt ist, dass ein geheimer Schlüssel auf der Clientseite vertraulich behandelt werden kann. Das Berechnen der Signatur ist nur eine umständliche Berechnung ohne praktische Sicherheitsverbesserung. Ich meine, im Vergleich zu der Einfachheit , dass ein OAuth 2.0 - Client eine Verbindung zu einem Server über TLS und einfach präsentiert client_id
und client_secret
kann nicht gesagt werden , dass die umständliche Berechnung besser ist in Bezug auf die Sicherheit.
Darüber hinaus erwähnt RFC 5849 (OAuth 1.0) nichts über offene Redirektoren, während RFC 6749 (OAuth 2.0) dies tut. Das heißt, der oauth_callback
Parameter von OAuth 1.0 kann zu einer Sicherheitslücke werden.
Daher denke ich nicht, dass OAuth 1.0 sicherer ist als OAuth 2.0.
[14. April 2016] Ergänzung zur Klarstellung meines Punktes
Die OAuth 1.0-Sicherheit basiert auf der Signaturberechnung. Eine Signatur wird unter Verwendung eines geheimen Schlüssels berechnet, wobei ein geheimer Schlüssel ein gemeinsam genutzter Schlüssel für HMAC-SHA1 ( RFC 5849, 3.4.2 ) oder ein privater Schlüssel für RSA-SHA1 ( RFC 5849, 3.4.3 ) ist. Jeder, der den geheimen Schlüssel kennt, kann die Signatur berechnen. Wenn also der geheime Schlüssel kompromittiert wird, ist die Komplexität der Signaturberechnung bedeutungslos, wie komplex sie auch sein mag.
Dies bedeutet, dass die Sicherheit von OAuth 1.0 nicht von der Komplexität und Logik der Signaturberechnung abhängt, sondern lediglich von der Vertraulichkeit eines geheimen Schlüssels. Mit anderen Worten, was für die OAuth 1.0-Sicherheit benötigt wird, ist nur die Bedingung, dass ein geheimer Schlüssel vertraulich behandelt werden kann. Dies mag extrem klingen, aber die Signaturberechnung fügt keine Sicherheitsverbesserung hinzu, wenn die Bedingung bereits erfüllt ist.
Ebenso verlassen sich vertrauliche OAuth 2.0- Clients auf dieselbe Bedingung. Wenn die Bedingung bereits erfüllt ist, gibt es ein Problem beim Erstellen einer sicheren Verbindung mit TLS und beim Senden client_id
und Senden client_secret
an einen Autorisierungsserver über die gesicherte Verbindung? Gibt es einen großen Unterschied in der Sicherheitsstufe zwischen vertraulichen OAuth 1.0- und OAuth 2.0-Clients, wenn beide auf derselben Bedingung beruhen?
Ich kann keinen guten Grund für OAuth 1.0 finden, OAuth 2.0 zu beschuldigen. Tatsache ist einfach, dass (1) OAuth 1.0 nur eine Spezifikation nur für vertrauliche Clients ist und (2) OAuth 2.0 das Protokoll auch für vertrauliche Clients und unterstützte öffentliche Clients vereinfacht hat . Unabhängig davon, ob dies bekannt ist oder nicht, werden Smartphone-Anwendungen als öffentliche Clients ( RFC 6749, 9 ) klassifiziert , die von OAuth 2.0 profitieren.