2017-10-20 11 views
5

OAuth 2.0 xác định tham số "trạng thái" được gửi theo yêu cầu của khách hàng để ngăn các cuộc tấn công yêu cầu qua nhiều trang web. Tương tự được đề cập trong thông số OpenID cho "nonce". Ngoài thực tế là "nonce" được trả lại trong mã thông báo ID thay vì tham số truy vấn, chúng xuất hiện để phục vụ cùng một mục đích chính xác. Nếu ai đó có thể giải thích lý do tại sao chúng riêng biệt làSự khác biệt giữa tham số "OAuth 2.0" trạng thái "và OpenID" nonce "? Tại sao nhà nước không thể tái sử dụng?

Trả lời

6

trạng thái và nonce có vẻ tương tự nhau. Nhưng nếu bạn đào sâu, bạn sẽ thấy rằng họ phục vụ các mục đích khác nhau.

trạng thái là để bảo vệ người dùng cuối khỏi các cuộc tấn công giả mạo yêu cầu chéo trang web (CSRF).

RFC6749 khẳng định rằng,

Sau khi ủy quyền đã được lấy từ người dùng cuối, việc ủy ​​quyền máy chủ chuyển hướng user-agent của người dùng cuối lại cho khách hàng với giá trị ràng buộc cần chứa trong "trạng thái" thông số. Giá trị ràng buộc cho phép khách hàng để xác minh tính hợp lệ của yêu cầu bằng cách kết hợp các giá trị ràng buộc với nhà nước chứng thực user-agent của

Và điều này được sử dụng để yêu cầu cấp phép. Nó cho phép máy khách xác thực rằng phản hồi ủy quyền không bị thay đổi. Về cơ bản nó cho phép khách hàng vượt qua kiểm tra yêu cầu ủy quyền và phản hồi.

Nonce phục vụ một mục đích khác. Nó liên kết các thẻ với khách hàng. Nó hoạt động như một tham số xác thực mã thông báo.

nonce - Giá trị chuỗi được sử dụng để liên kết phiên khách hàng với mã thông báo ID và để giảm thiểu các cuộc tấn công phát lại. Giá trị được chuyển qua chưa được sửa đổi từ Yêu cầu xác thực thành Mã thông báo ID. Nếu có trong Mã thông báo ID, Khách hàng PHẢI xác minh rằng Giá trị xác nhận quyền sở hữu không bằng với giá trị của thông số nonce được gửi trong Yêu cầu xác thực. Nếu có trong Yêu cầu xác thực, Máy chủ ủy quyền PHẢI bao gồm một Yêu cầu không phải trong Mã thông báo ID với Giá trị xác nhận là giá trị không được gửi trong Yêu cầu xác thực. Máy chủ ủy quyền NÊN thực hiện không xử lý khác trên các giá trị nonce được sử dụng. Giá trị nonce là một chuỗi có phân biệt chữ hoa chữ thường

Như bạn có thể thấy, giá trị nonce bắt nguồn từ yêu cầu ủy quyền và nó được tạo bởi khách hàng. Và nếu nonce được bao gồm, nó sẽ xuất hiện trong token. Vì vậy, khách hàng có thể xác thực mã thông báo nhận được đối với yêu cầu ủy quyền ban đầu, do đó đảm bảo tính hợp lệ của mã thông báo.

Ngoài ra, tùy thuộc vào loại luồng, nonce có thể là tham số bắt buộc. Dòng chảy ngầm và luồng luồng lai bắt buộc nonce giá trị.

+0

Điều gì sẽ là nhược điểm, nếu chúng ta vượt qua trạng thái của chính nó trong mã thông báo ID là nonce và cũng ở bên ngoài nó. Sử dụng một bên ngoài để ngăn chặn CSRF và bên trong một để Bind phiên trên phía khách hàng. – dvsakgec

+0

@dvsakgec Từ quan điểm giao thức, vấn đề là sử dụng trạng thái và nonce cho bảo mật và xác nhận hợp lệ. Theo như tôi biết thông số kỹ thuật không hạn chế bạn sử dụng cùng một giá trị cho nhà nước và nonce. Trong một vector tấn công tinh vi, người ta có thể trích xuất giá trị trạng thái từ phản hồi ủy quyền (ví dụ: - ứng dụng di động).Vì vậy, việc có cùng giá trị sẽ loại bỏ một điều kiện khỏi quá trình xác thực mã thông báo của bạn, điều này không tốt –

Các vấn đề liên quan