2011-09-06 47 views
20

Tôi đang xây dựng một ứng dụng/API cho phép người dùng đăng nhập bằng Facebook, Twitter hoặc Google. Tôi tự hỏi thực tiễn tốt nhất trong việc cho phép những người dùng đó sử dụng cùng một tài khoản để đăng nhập vào API là gì.Bảo mật API REST với Facebook OAuth

  1. Một vài ý tưởng mà tôi đã có là chuyển mã thông báo xác thực/cookie trong tiêu đề tới API cho mọi yêu cầu và sử dụng để xác thực trên chương trình phụ trợ.
  2. Chạy thiết lập OAuth của riêng tôi và làm cho người dùng xác thực một lần với mặt sau để lấy mã thông báo OAuth của tôi và sử dụng mã thông báo đó từ đó.
+0

Bạn đề cập đến người dùng có tùy chọn đăng nhập bằng Facebook, Twitter và Google. Họ có buộc phải đăng nhập với một trong những nhà cung cấp OpenId đó không? –

+0

Đây chính xác là vấn đề của tôi và giải pháp 1 có vẻ thực sự tốt nhưng tôi không hiểu cách API sử dụng mã thông báo xác thực để xác thực yêu cầu. Bạn có thể giải thích? – s0nica

Trả lời

1

Tôi đang làm điều tương tự và giải pháp của tôi là khớp với địa chỉ email bạn nhận được từ các API tương ứng này.

Đối với Facebook, bạn cần có sự cho phép đặc biệt của người dùng cuối để đăng ký địa chỉ email tại đó. Bạn làm điều này bằng cách thêm &scope=email vào yêu cầu oauth đầu tiên.

Một bất lợi là bạn cần nhận được sự cho phép này từ người dùng cuối và họ có thể từ chối. Một bất lợi khác là người dùng cần phải sử dụng cùng một địa chỉ email cho Google, Facebook và Twitter.

Lợi thế là bản ghi người dùng được hợp nhất tự động, để người dùng có thể truy cập trực tiếp tất cả dữ liệu của họ nếu họ đăng nhập lần đầu qua Google và lần thứ hai thông qua Facebook.

Một cách tiếp cận khác sẽ là hợp nhất dữ liệu của họ theo cách thủ công bằng cách khiến họ đăng nhập vào Google khi họ đã đăng nhập thông qua Facebook. Sau đó, bạn có thể kết luận rằng họ là cùng một người dùng, ngay cả khi họ sử dụng các địa chỉ email khác nhau cho cả hai. Nhưng đây là một cách tiếp cận tẻ nhạt hơn, vì bạn vẫn cần hợp nhất dữ liệu người dùng của ứng dụng từ cả hai tài khoản.

+0

Làm cách nào để địa chỉ email của người dùng tạo điều kiện xác thực theo bất kỳ cách nào? (nếu người tiêu dùng của API có thể giả mạo bất kỳ địa chỉ email nào họ muốn, thì đó không phải là bảo mật) –

+0

Không nhận địa chỉ email cho mỗi người, nhưng thực tế là bạn có thể nhận được mã thông báo từ Facebook hoặc Google. Điều đó có nghĩa là người dùng đã xác thực thành công đối với tài khoản đó. –

+0

cách phân tích cú pháp xà phòng xml –

0

Giải pháp đầu tiên của bạn chính là cách tôi thực hiện. Vì tất cả các dịch vụ còn lại của tôi đều không trạng thái, mã thông báo truy cập đi vào tiêu đề và được phân tích bằng bộ lọc xác thực bảo mật mùa xuân trên mọi yêu cầu. Tôi sử dụng một grails sever với plugin spring-security-oauth. Chúng tôi cũng chạy một trang web cho phép sử dụng cookie phiên cho quyền truy cập dựa trên trình duyệt.

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