Захист протоколу OAuth 1.0 ( RFC 5849 ) спирається на припущення, що секретний ключ, вбудований у клієнтську програму, може зберігатися в таємниці. Однак припущення є наївним.
В OAuth 2.0 ( RFC 6749 ) таке наївне клієнтське додаток називається конфіденційним клієнтом. З іншого боку, клієнтська програма в умовах, коли важко зберігати секретний ключ конфіденційним, називається публічним клієнтом. Див. 2.1. Типи клієнтів для детальної інформації.
У цьому сенсі OAuth 1.0 є специфікацією лише для конфіденційних клієнтів.
" OAuth 2.0 і дорога до пекла " говорить про те, що OAuth 2.0 є менш захищеним, однак між клієнтами OAuth 1.0 та конфіденційними клієнтами OAuth 2.0 практично немає різниці в рівні безпеки. OAuth 1.0 вимагає обчислення підпису, але це не підвищує безпеку, якщо вже впевнені, що секретний ключ на стороні клієнта може зберігатися в таємниці. Обчислювальний підпис - це просто громіздкий розрахунок без будь-якого практичного підвищення безпеки. Я маю на увазі, порівняно з простотою того, що клієнт OAuth 2.0 підключається до сервера через TLS і просто представляє, client_id
і client_secret
не можна сказати, що громіздкий розрахунок кращий з точки зору безпеки.
Крім того, RFC 5849 (OAuth 1.0) нічого не згадує про відкриті перенаправники, тоді як RFC 6749 (OAuth 2.0). Тобто oauth_callback
параметр OAuth 1.0 може стати ямою безпеки.
Тому я не думаю, що OAuth 1.0 є більш безпечним, ніж OAuth 2.0.
[14 квітня 2016 р.] Доповнення для уточнення моєї точки зору
Безпека OAuth 1.0 покладається на обчислення підписів. Підпис обчислюється за допомогою секретного ключа, де секретний ключ є спільним ключем для HMAC-SHA1 ( RFC 5849, 3.4.2 ) або приватним ключем для RSA-SHA1 ( RFC 5849, 3.4.3 ). Кожен, хто знає секретний ключ, може обчислити підпис. Отже, якщо секретний ключ порушений, складність обчислення підпису є безглуздим, наскільки це складно.
Це означає, що безпека OAuth 1.0 покладається не на складність та логіку обчислення підпису, а лише на конфіденційність секретного ключа. Іншими словами, те, що потрібно для безпеки OAuth 1.0, є лише умовою, що секретний ключ може зберігатися в таємниці. Це може здатися екстремальним, але обчислення підписів не покращує безпеку, якщо умова вже задоволена.
Так само конфіденційні клієнти OAuth 2.0 покладаються на ті ж умови. Якщо умова вже задоволена, чи є якась проблема у створенні захищеного з'єднання за допомогою TLS та надсилання client_id
та client_secret
до сервера авторизації через захищене з'єднання? Чи є велика різниця в рівні безпеки між конфіденційними клієнтами OAuth 1.0 та OAuth 2.0, якщо обидва покладаються на однакові умови?
Я не можу знайти жодної вагомої причини, щоб OAuth 1.0 звинувачував OAuth 2.0. Справа просто в тому, що (1) OAuth 1.0 - це лише специфікація лише для конфіденційних клієнтів, і (2) OAuth 2.0 спростив протокол для конфіденційних клієнтів і підтримував публічних клієнтів. Незалежно від того, добре відомо це чи ні, програми для смартфонів класифікуються як публічні клієнти ( RFC 6749, 9 ), яким користується OAuth 2.0.