2011-01-27 29 views
7

Tôi đã phát triển một API đơn giản để cho phép liên lạc giữa các ứng dụng Android/iPhone và máy chủ của tôi. Trong ứng dụng của tôi, người dùng cần phải xác thực bản thân và họ làm điều đó bằng các thông tin đăng nhập/mật khẩu với các cuộc gọi API sau:Facebook Kết nối để xác thực trên API cá nhân

http://api.myapp.com/login?user=xxx&pass=pass 

Application nhận lại:

{ "api_token": "xxxx-xxxx-xxxx-xxxx" } 

Vì vậy, về cơ bản tôi trao đổi thông tin của tôi chống lại api_token.

Tôi muốn thêm hỗ trợ kết nối Facebook. Tôi đã sử dụng thành công SDK Facebook và nhận được chính xác access_token.

Tuy nhiên, tôi cần phải thực hiện một cơ chế trao đổi access_token với api_token

Giả sử người dùng đã kết nối với tài khoản của mình với Facebook (trên bảng điều khiển người dùng web của mình), điều gì sẽ thực hiện tốt nhất để tiến hành việc trao đổi ?

Trả lời

5

Đây là cách cuối cùng tôi đã làm. Nó hoạt động rất tốt trong hơn một năm, chưa bao giờ có vấn đề gì. Ý tưởng là để trao đổi thẻ bằng cách sử dụng cuộc gọi API sau:

http://api.myapp.com/login/facebook?access_token=<facebook_access_token> 

Server side, bạn xác minh tính hợp lệ của access_token với một đơn giản

wget -qO- https://graph.facebook.com/me?access_token=<facebook_access_token> 

nào gửi lại cho bạn một JSON với tất cả các thông tin người dùng, bao gồm ID Facebook của người dùng. Giả sử người dùng đã kết nối tài khoản của mình với Facebook, bạn có thể tra cứu user_id và gửi lại api_token.

+0

Đây là kịch bản mà tôi quan tâm: Ứng dụng A mua mã thông báo truy cập fb cho người dùng có quyền X. Ứng dụng A truy cập url đăng nhập của bạn tại 'http://api.myapp.com/login/facebook ? access_token = ... ' Vì bây giờ bạn có mã thông báo truy cập mà ứng dụng A đã mua, bây giờ bạn có tất cả quyền truy cập giống như người dùng, nếu không có người dùng cho phép bạn làm như vậy (họ ' ve chỉ được cấp quyền cho ứng dụng A). Mặc dù tôi có thể thấy điều này là có thể bảo vệ theo nhiều cách, nhưng dường như nó có vẻ sai và có khả năng vi phạm lòng tin của người dùng. Bạn nghĩ sao? –

+2

Vâng theo một cách có, bạn là đúng, nhưng theo như tôi đang quan tâm, chúng tôi là "App A". IMHO, nó giống như người dùng đăng ký nhận bản tin của chúng tôi: chúng tôi có thể spam người dùng hoặc bán email cho tấn bên thứ ba nhưng chúng tôi không phải vì chúng tôi là công ty có trách nhiệm (chịu trách nhiệm pháp lý) – EricLarch

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