Bảo mật của giao thức OAuth 1.0 ( RFC 5849 ) dựa trên giả định rằng một khóa bí mật được nhúng trong ứng dụng khách có thể được giữ bí mật. Tuy nhiên, giả định là ngây thơ.
Trong OAuth 2.0 ( RFC 6749 ), một ứng dụng khách ngây thơ như vậy được gọi là ứng dụng khách bí mật . Mặt khác, một ứng dụng khách trong một môi trường khó giữ bí mật khóa bí mật được gọi là ứng dụng khách công khai . Xem 2.1. Các loại khách hàng để biết chi tiết.
Theo nghĩa đó, OAuth 1.0 là một đặc điểm kỹ thuật chỉ dành cho khách hàng bí mật.
" OAuth 2.0 và Đường xuống địa ngục " nói rằng OAuth 2.0 kém an toàn hơn, nhưng không có sự khác biệt thực tế về mức độ bảo mật giữa các máy khách OAuth 1.0 và máy khách bí mật OAuth 2.0. OAuth 1.0 yêu cầu tính toán chữ ký, nhưng nó không tăng cường bảo mật nếu đã được đảm bảo rằng một khóa bí mật ở phía máy khách có thể được giữ bí mật. Chữ ký điện toán chỉ là một tính toán cồng kềnh mà không có bất kỳ sự tăng cường bảo mật thực tế nào. Ý tôi là, so với sự đơn giản mà máy khách OAuth 2.0 kết nối với máy chủ qua TLS và chỉ trình bày client_id
và client_secret
, không thể nói rằng tính toán cồng kềnh là tốt hơn về mặt bảo mật.
Ngoài ra, RFC 5849 (OAuth 1.0) không đề cập bất cứ điều gì về chuyển hướng mở trong khi RFC 6749 (OAuth 2.0) thì không. Đó là, oauth_callback
tham số của OAuth 1.0 có thể trở thành lỗ hổng bảo mật.
Do đó, tôi không nghĩ OAuth 1.0 an toàn hơn OAuth 2.0.
[14 tháng 4 năm 2016] Ngoài ra để làm rõ quan điểm của tôi
Bảo mật OAuth 1.0 dựa trên tính toán chữ ký. Chữ ký được tính bằng khóa bí mật trong đó khóa bí mật là khóa chung cho HMAC-SHA1 ( RFC 5849, 3.4.2 ) hoặc khóa riêng cho RSA-SHA1 ( RFC 5849, 3.4.3 ). Bất cứ ai biết khóa bí mật đều có thể tính chữ ký. Vì vậy, nếu khóa bí mật bị xâm phạm, sự phức tạp của tính toán chữ ký là vô nghĩa tuy nhiên nó phức tạp.
Điều này có nghĩa là bảo mật OAuth 1.0 không phụ thuộc vào độ phức tạp và logic tính toán chữ ký mà chỉ dựa vào tính bảo mật của khóa bí mật. Nói cách khác, những gì cần thiết cho bảo mật OAuth 1.0 chỉ là điều kiện để một khóa bí mật có thể được giữ bí mật. Điều này nghe có vẻ cực đoan, nhưng tính toán chữ ký không thêm sự tăng cường bảo mật nếu điều kiện đã được thỏa mãn.
Tương tự, các máy khách bí mật OAuth 2.0 cũng dựa trên cùng một điều kiện. Nếu điều kiện đã được thỏa mãn, có bất kỳ vấn đề nào trong việc tạo kết nối an toàn bằng TLS và gửi client_id
và client_secret
đến một máy chủ ủy quyền thông qua kết nối được bảo mật không? Có sự khác biệt lớn về mức độ bảo mật giữa các máy khách bí mật OAuth 1.0 và OAuth 2.0 nếu cả hai đều dựa trên cùng một điều kiện không?
Tôi không thể tìm thấy bất kỳ lý do chính đáng nào để OAuth 1.0 đổ lỗi cho OAuth 2.0. Thực tế đơn giản là (1) OAuth 1.0 chỉ là thông số kỹ thuật chỉ dành cho khách hàng bí mật và (2) OAuth 2.0 đã đơn giản hóa giao thức cho khách hàng bí mật và khách hàng công cộng được hỗ trợ . Bất kể nó có được biết rõ hay không, các ứng dụng điện thoại thông minh được phân loại là máy khách công cộng ( RFC 6749, 9 ), được hưởng lợi từ OAuth 2.0.