Mã truy cập Người dùng và mã truy cập Trang mặc định là mã ngắn hạn và sẽ hết hạn sau vài giờ. Tuy nhiên, bạn có thể đổi mã ngắn hạn lấy mã dài hạn.
Khi bạn dùng iOS, Android hoặc JavaScript SDK, SDK sẽ tự động làm mới mã nếu ai đó đã dùng ứng dụng của bạn trong vòng 90 ngày qua. Các ứng dụng di động gốc dùng Facebook SDK sẽ nhận được mã truy cập Người dùng dài hạn, hoạt động tốt trong khoảng 60 ngày. Mã này sẽ được làm mới một lần mỗi ngày khi người dùng ứng dụng của bạn gửi yêu cầu đến máy chủ của Facebook. Nếu không có yêu cầu nào, mã này sẽ hết hạn sau khoảng 60 ngày và người đó phải thực hiện lại quy trình đăng nhập thì mới có mã mới.
Phiên bản API Đồ thị mới nhất: v21.0
Nếu cần mã truy cập Người dùng dài hạn, bạn có thể tạo một mã dựa trên mã truy cập Người dùng ngắn hạn. Mã dài hạn thường hoạt động trong khoảng 60 ngày.
Bạn sẽ cần có:
Truy vấn điểm cuối GET oauth/access_token
.
curl -i -X GET "https://graph.facebook.com/{graph-api-version}/oauth/access_token? grant_type=fb_exchange_token& client_id={app-id}& client_secret={app-secret}& fb_exchange_token={your-access-token}"
{ "access_token":"{long-lived-user-access-token}", "token_type": "bearer", "expires_in": 5183944 //The number of seconds until the token expires }
Dưới đây là quy trình tạo mã truy cập Người dùng dài hạn:
Sau khi truy xuất mã dài hạn, bạn có thể dùng mã đó từ máy chủ của mình hoặc gửi lại về máy khách để sử dụng tại đó.
Bạn không thể dùng mã đã hết hạn để yêu cầu mã dài hạn. Nếu mã đã hết hạn, ứng dụng của bạn phải gửi lại cho người dùng thông qua quy trình đăng nhập để tạo lại mã truy cập ngắn hạn mới.
Thực hiện lệnh gọi này từ máy chủ của bạn, không phải từ máy khách. Khóa bí mật của ứng dụng có trong lệnh gọi API này, vì vậy, bạn tuyệt đối không được thực hiện lệnh gọi phía máy khách. Thay vào đó, hãy triển khai mã phía máy chủ tạo yêu cầu rồi chuyển phản hồi có mã dài hạn trở lại mã phía máy khách. Đây sẽ là chuỗi khác với mã ban đầu nên nếu bạn đang lưu trữ những mã này, hãy thay thế mã cũ.
Không dùng cùng một mã dài hạn trên nhiều ứng dụng web (ví dụ: nếu người đó đăng nhập từ nhiều máy tính). Thay vào đó, bạn nên dùng mã dài hạn trên máy chủ của mình để tạo một mã rồi sử dụng mã đó để lấy mã dài hạn trên máy khách. Vui lòng xem bên dưới để biết thông tin về cách Tạo mã dài hạn từ mã dài hạn phía máy chủ.
Nếu cần mã truy cập Trang dài hạn, bạn có thể tạo một mã dựa trên mã truy cập Người dùng dài hạn. Mã truy cập Trang dài hạn không có ngày hết hạn và chỉ hết hạn hoặc bị vô hiệu hóa trong một số điều kiện nhất định.
Bạn sẽ cần có:
Truy vấn điểm cuối GET {app-scoped-user-id}?accounts
.
curl -i -X GET "https://graph.facebook.com/{graph-api-version}/{app-scoped-user-id}/accounts? access_token={long-lived-user-access-token}"
{ "data":[ { "access_token":"{long-lived-page-access-token}", "category":"Brand", "category_list":[ { "id":"1605186416478696", "name":"Brand" } ], "name":"Cute Kitten Page", "id":"{page-id}", "tasks":[ "ANALYZE", "ADVERTISE", "MODERATE", "CREATE_CONTENT", "MANAGE" ] } ], "paging":{ "cursors":{ "before":"MTM1MzI2OTg2NDcyODg3OQZDZD", "after":"MTM1MzI2OTg2NDcyODg3OQZDZD" } } }
Facebook cung cấp tùy chọn lấy mã dài hạn cho ứng dụng để tránh phải kích hoạt hệ thống spam tự động của Facebook. Các ứng dụng:
Ở cấp độ cao, bạn có thể lấy mã dài hạn cho máy khách bằng cách:
Truy vấn điểm cuối GET oauth/client_code
. URI chuyển hướng phải đúng là giá trị mà bạn đặt trong bảng điều khiển ứng dụng ở thẻ Đăng nhập bằng Facebook > Cài đặt máy khách > Cài đặt OAuth.
curl -i -X GET "https://graph.facebook.com/{graph-api-version}/oauth/client_code? client_id={app-id}& client_secret={app-secret}& redirect_uri={app-redirect-uri}& access_token={long-lived-user-access-token}"
{ "code":"{code-for-your-client}" }
Sau khi truy xuất mã từ máy chủ của Facebook, bạn cần chuyển mã đó đến máy khách qua một kênh an toàn. Sau khi hoàn tất, bạn cần gửi yêu cầu từ máy khách đến điểm cuối /oauth/access_token
:
curl -i -X GET "https://graph.facebook.com/{graph-api-version}/oauth/access_token? code={code-for-your-client}& client_id={app-id}& redirect_uri={app-redirect-uri}& machine_id= {your-client-machine-id}"
machine_id
là thông số không bắt buộc có nhiệm vụ xác định và theo dõi máy khách. Thông số này dùng cho mục đích bảo mật và ngăn chặn spam. Thông số này là giá trị cho mỗi máy khách, chứ không phải cho mỗi người dùng. Nếu từng thực hiện lệnh gọi để lấy mã và nhận được machine_id
thì bạn nên thêm mã đó vào yêu cầu mã của mình.
{ "access_token":"{long-lived-access-token}", "expires_in":5183944, //The number of seconds until the token expires "machine_id":"{your-client-machine-id}" }
Dưới đây là quy trình tạo mã dài hạn: