2012-01-21 2 views
14

Tiêu đề nói đến phần lớn câu hỏi, nhưng tôi đang gặp khó khăn khi đóng gói bộ não của mình xung quanh cách tôi có người dùng được xác thực trên Facebook có quyền truy cập vào API của trang web của riêng tôi.Làm cách nào để xác thực với API của trang web của riêng tôi khi sử dụng Kết nối Facebook để đăng nhập/tạo tài khoản?

Sau khi người dùng đã xác thực với FB, tôi có một chút thông tin về người dùng nhưng không có khóa API hoặc tên người dùng/mật khẩu để chuyển đến máy chủ API bảo mật của riêng tôi để xác thực.

Tôi đã tìm thấy một số câu hỏi liên quan, nhưng không có gì có vẻ như một câu trả lời lý tưởng:

Bất kỳ trợ giúp sẽ được đánh giá cao!

+1

Khi bạn nói 'API trang web của riêng bạn' có nghĩa là xác thực cuộc gọi giữa trình duyệt và trang web của bạn hay ý của bạn là bất kỳ điều gì/ai cũng có thể sử dụng, chẳng hạn như bên thứ ba và thiết bị di động? – spotman

+3

@spotman - Cảm ơn bạn đã thực sự hữu ích thay vì chỉ là tinh ranh. Trang web của tôi sử dụng API của riêng tôi để lấy nội dung thay vì kết nối cơ sở dữ liệu. Tôi đang xác thực chúng trên trang web với FB Connect, nhưng tôi đang tìm kiếm phương pháp tốt nhất để quay lại và xác thực chúng bằng API của riêng tôi. Đã thực hiện Xác thực cơ bản, nhưng người dùng FB Connect không có mật khẩu để xác thực. Cảm ơn một lần nữa. – gstjohn

Trả lời

10

Vì bạn đang xác thực người dùng của mình thông qua kết nối Facebook, bạn biết đủ về người dùng.

Bất kể authentication flow bạn đang sử dụng, bạn sẽ

BướC# 1: nhận được một access_token và một tham số expire. Rất có thể, bạn cũng đã yêu cầu user_id (nếu bạn đang sử dụng JS-SDK, nó sẽ xử lý hầu hết điều này).

BướC# 2: tóm lược những thông tin (access_token, expire & user_id) trong một chuỗi băm, ví dụ mimic định dạng Facebook signed_request.

BướC# 3: gửi chuỗi băm này trong các cuộc gọi API của riêng bạn:

https://mydomain.com/apis/getUserSecretData?fb_oauth=my_hashed_string&vars=my_other_vars 

BướC# 4: trong API end-quan điểm của bạn, giải mã/giải mã chuỗi băm bạn và xác minh expire thông số và nếu số access_token hết hạn, thì bạn cần phải yêu cầu một số mới và lặp lại cuộc gọi API của mình.

+1

Tôi thực sự thích điều này! Cám ơn tiện ích này. Một câu hỏi tiếp theo: Sau Bước 4, có an toàn để API của tôi trả về một khóa API cho máy khách mà nó có thể sử dụng cho các yêu cầu còn lại hay tôi chỉ cần đặt tất cả các yêu cầu của tôi vào một signed_request? – gstjohn

+1

Vấn đề là nếu người dùng độc hại giải mã ứng dụng của bạn và nhận khóa được sử dụng để ký yêu cầu thì họ có thể sử dụng bất kỳ mã thông báo xác thực nào với userid tùy ý vì bạn không xác thực userid đối với authtoken. Đây là một vấn đề khác khi ứng dụng là một ứng dụng dành cho thiết bị di động vì nó dễ dàng dịch ngược. Đối với một ứng dụng web, điều đó không quan trọng vì khóa mã hóa của bạn sẽ được lưu trữ an toàn trên máy chủ Web.Câu hỏi này cho thấy cách xác thực userid chống lại authtoken từ api http://stackoverflow.com/questions/4817991/facebook-connect-to-authenticate-on-a-personal-api –