2011-01-07 9 views
50

Theo tôi được biết, đây là quá trình cơ bản cho Facebook ứng dụng iframe vải mới bằng cách sử dụng API OAuth2 trong một nutshell:Cách chính xác để làm mới mã thông báo truy cập Facebook OAuth2 sau khi hết hạn là gì?

  1. Redirect (hoặc có nhấp chuột liên kết người dùng) URL cho phép ứng dụng của
  2. cho phép tài khoản và được chuyển hướng đến URL gọi lại của bạn
  3. callback sử dụng "code" tham số để có được một access token
  4. truy cập thẻ được sử dụng với Graph API để kéo hoặc đẩy thông tin

Vấn đề là mã thông báo truy cập hết hạn nhanh chóng và cần được "làm mới", vì vậy câu hỏi của tôi là 1) làm cách nào để bạn phát hiện thấy mã thông báo đã hết hạn ngoài việc cố gắng sử dụng và chỉ gặp lỗi? và 2) thực hành tốt nhất để lấy mã thông báo mới là gì?

Hiện tại, tôi chỉ phát hiện thấy có lỗi khi cố gắng lấy thông tin của người dùng bằng mã thông báo truy cập của họ, sau đó chuyển hướng đến URL ủy quyền một lần nữa - vì họ đã ủy quyền ứng dụng một trang trống nhấp nháy và họ được chuyển hướng trở lại để gọi lại ứng dụng của tôi, nơi tôi nhận được một mã thông báo mới. Nó rất khó khăn, tôi không thể tin rằng đây là phương pháp thích hợp.

Trả lời

38
  1. Cách duy nhất để biết cookie hợp lệ là sử dụng cookie và bắt lỗi nếu nó hết hạn. Không có phương pháp bỏ phiếu hoặc bất cứ điều gì để kiểm tra xem mã thông báo có hợp lệ hay không.

  2. Để nhận mã thông báo mới, chỉ cần chuyển hướng người dùng đến trang xác thực một lần nữa. Vì họ đã ủy quyền cho ứng dụng của bạn nên ngay lập tức họ sẽ được chuyển hướng trở lại ứng dụng của bạn và bạn sẽ có một mã thông báo mới. Họ sẽ không được nhắc cho phép vì họ đã làm điều đó.

Tóm lại, không có thủ thuật nào cho việc này. Bạn đã làm điều đó một cách chính xác.

+3

Tôi nghi ngờ đây là câu trả lời nhưng tôi cảm thấy điều quan trọng là phải đăng câu hỏi này và nhận được một số câu trả lời. Có nhiều bài đăng trùng lặp về hết hạn mã thông báo truy cập và các vấn đề iframe, nhưng không ai hỏi về vấn đề cụ thể này mà tài liệu trên Facebook bị che khuất.Tôi sẽ cung cấp cho bạn cái gật đầu để có câu trả lời tốt nhất sau một hoặc hai ngày để cho mọi người kêu vang, cảm ơn. – mtjhax

+0

Nhưng điều gì sẽ xảy ra nếu ứng dụng hoặc trò chơi của bạn cần lặp lại các cuộc gọi API trên Facebook, ví dụ như từ Javascript hoặc Flash? Bạn không thể mong đợi người dùng buộc phải tải lại ứng dụng của bạn mỗi giờ, tại những thời điểm tiềm năng quan trọng trong trò chơi? – Toxikman

+2

Tôi biết đây là một chút cũ nên nó thậm chí không có vấn đề bây giờ, nhưng bạn có thể sử dụng URL Trạng thái facebook (từ Facebook API để có được trạng thái của một phiên) – qodeninja

23

Gần đây, facebook đã thực hiện một số thay đổi đối với mã thông báo truy cập cho phép chúng được làm mới định kỳ.

https://graph.facebook.com/oauth/access_token? 
client_id=APP_ID& 
client_secret=APP_SECRET& 
grant_type=fb_exchange_token& 
fb_exchange_token=EXISTING_ACCESS_TOKEN 

Để biết thêm chi tiết, kiểm tra ở đây: https://developers.facebook.com/docs/roadmap/completed-changes/offline-access-removal

+4

nhưng có vẻ như nó chỉ hữu ích cho ứng dụng mới với mã thông báo ngắn ngủi. Đối với ứng dụng hiện có sử dụng mã thông báo tồn tại lâu dài, nó không hữu ích. [bạn vượt qua access_token có thời gian hết hạn dài, điểm cuối sẽ chỉ chuyển cùng access_token đó cho bạn mà không thay đổi hoặc kéo dài thời gian hết hạn.] – kitokid

+0

Vâng, đó là một chút đau. Bạn chỉ có thể nhận mã thông báo truy cập trong tối đa 60 ngày. – logan

+0

Có một lỗ hổng bảo mật lớn với điều này vì bạn đang khó mã hóa (hoặc truyền) client_secret của bạn từ ứng dụng. – PSIXO

2

nếu người dùng đã ủy quyền ứng dụng của bạn và truy cập thẻ hết hạn. bạn có thể chuyển hướng người dùng đến trang xác thực một lần nữa. nhưng hộp thoại oauth không hiển thị vì người dùng đã ủy quyền ứng dụng của bạn. anh ta sẽ chuyển hướng đến thông số redirect_url bạn đã sử dụng.

4
//you just need more step because the access token you are getting will expire in 1 hour 
    //you can overcome this in step 5 

    1-Redirect to (or have user click link to) app's authorization URL 
2-User authorizes and is redirected to your callback URL 
3-Callback uses "code" parameter to get a access token 
4-Access token is used with Graph API to pull or push information 
    5-exchange short-lived access token you just got with 60 day access token 
    https://graph.facebook.com/oauth/access_token?client_id=APP_ID&client_secret=APP_SECRET&grant_type=fb_exchange_token&fb_exchange_token=EXISTING_ACCESS_TOKEN 
    6-after 60 day the user must login again to your app and the steps from 1-5 will be repeated. 
    --the real problem you will face is how to make the user visit your app page again 
3

Facebook đã xóa tính năng làm mới mã thông báo truy cập ở chế độ "thay mặt". Cách tốt nhất và dễ dàng là chuyển hướng người dùng đến trang đăng nhập facebook để đăng lại ứng dụng. Tìm facbook doc here

-1

{ "lỗi": { "message": "Thiếu thông số redirect_uri.", "Loại": "OAuthException", "code": 191, "fbtrace_id": "BHvng7s53ra"}}