Bezpieczeństwo protokołu OAuth 1.0 ( RFC 5849 ) opiera się na założeniu, że tajny klucz osadzony w aplikacji klienckiej może być poufny. Jednak założenie jest naiwne.
W OAuth 2.0 ( RFC 6749 ) taka naiwna aplikacja kliencka nazywa się klientem poufnym . Z drugiej strony aplikacja kliencka w środowisku, w którym trudno jest zachować poufność tajnego klucza, nazywa się klientem publicznym . Zobacz 2.1. Typy klientów, aby uzyskać szczegółowe informacje.
W tym sensie OAuth 1.0 jest specyfikacją tylko dla poufnych klientów.
„ OAuth 2.0 i droga do piekła ” mówi, że OAuth 2.0 jest mniej bezpieczny, ale nie ma praktycznej różnicy w poziomie bezpieczeństwa między klientami OAuth 1.0 a poufnymi klientami OAuth 2.0. Protokół OAuth 1.0 wymaga obliczenia podpisu, ale nie zwiększa bezpieczeństwa, jeśli jest już zapewniony, że tajny klucz po stronie klienta może być poufny. Obliczanie podpisu jest po prostu uciążliwym obliczeniem bez praktycznego zwiększenia bezpieczeństwa. Mam na myśli, w porównaniu z prostotą, że klient OAuth 2.0 łączy się z serwerem przez TLS i po prostu przedstawia client_id
i client_secret
nie można powiedzieć, że uciążliwe obliczenia są lepsze pod względem bezpieczeństwa.
Ponadto RFC 5849 (OAuth 1.0) nie wspomina o otwartych przekierowaniach, podczas gdy RFC 6749 (OAuth 2.0). Oznacza to, że oauth_callback
parametr OAuth 1.0 może stać się luką bezpieczeństwa.
Dlatego nie sądzę, aby OAuth 1.0 był bezpieczniejszy niż OAuth 2.0.
[14 kwietnia 2016 r.] Dodatek w celu wyjaśnienia mojego punktu
Bezpieczeństwo OAuth 1.0 opiera się na obliczeniach sygnatur. Podpis jest obliczany przy użyciu tajnego klucza, gdzie tajny klucz jest kluczem współdzielonym dla HMAC-SHA1 ( RFC 5849, 3.4.2 ) lub kluczem prywatnym dla RSA-SHA1 ( RFC 5849, 3.4.3 ). Każdy, kto zna tajny klucz, może obliczyć podpis. Tak więc, jeśli tajny klucz zostanie naruszony, złożoność obliczeń podpisu jest bez znaczenia, jakkolwiek jest złożona.
Oznacza to, że bezpieczeństwo OAuth 1.0 nie opiera się na złożoności i logice obliczeń podpisu, lecz jedynie na poufności tajnego klucza. Innymi słowy, dla bezpieczeństwa OAuth 1.0 potrzebny jest tylko warunek, że tajny klucz może być poufny. Może się to wydawać ekstremalne, ale obliczenia sygnatur nie zwiększają bezpieczeństwa, jeśli warunek jest już spełniony.
Podobnie OAuth 2.0 poufne klienci polegają na tym samym stanie. Jeśli warunek jest spełniony już jest jakiś problem w tworzeniu bezpiecznego połączenia przy użyciu protokołu TLS oraz wysyłanie client_id
i client_secret
do serwera autoryzacji za pośrednictwem bezpiecznego połączenia? Czy istnieje jakaś duża różnica w poziomie bezpieczeństwa między poufnymi klientami OAuth 1.0 i OAuth 2.0, jeśli oba polegają na tym samym stanie?
Nie mogę znaleźć żadnego dobrego powodu, by OAuth 1.0 obwiniał OAuth 2.0. Faktem jest, że (1) OAuth 1.0 jest tylko specyfikacją tylko dla klientów poufnych, a (2) OAuth 2.0 uprościł protokół dla klientów poufnych i obsługiwanych klientów publicznych . Niezależnie od tego, czy wiadomo, czy nie, aplikacje na smartfony są klasyfikowane jako klienci publiczni ( RFC 6749, 9 ), którzy korzystają z OAuth 2.0.