Mã truy cập dài hạn

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: v19.0

Lấy mã truy cập Người dùng dài hạn

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ó:

  • Mã truy cập Người dùng hợp lệ
  • ID ứng dụng
  • Khóa bí mật của ứng dụng

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}" 

Phản hồi mẫu

{
  "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 đó.

Cảnh báo

  • 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ủ.

Lấy mã truy cập Trang dài hạn

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}"

Phản hồi mẫu

{
  "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"
    }
  }
}

Lấy mã dài hạn cho máy khách

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ó hệ thống xác thực riêng (ví dụ như sử dụng tên người dùng/mật khẩu)
  • Lưu trữ mã truy cập Facebook trên máy chủ của mình cho những người dùng các ứng dụng khác nhau (ứng dụng di động gốc hoặc trên trình duyệt)
  • Thực hiện lệnh gọi API từ tất cả các máy khách khác nhau này

Ở cấp độ cao, bạn có thể lấy mã dài hạn cho máy khách bằng cách:

  1. Khi dùng một mã truy cập dài hạn hợp lệ, máy chủ của bạn sẽ gửi yêu cầu để nhận mã từ Facebook.
  2. Facebook sẽ gửi lại một mã cho máy chủ của bạn và bạn gửi mã này cho máy khách một cách an toàn.
  3. Máy khách sẽ dùng mã này để yêu cầu mã dài hạn từ Facebook.
  4. Facebook sẽ gửi cho máy khách một mã dài hạn. Mã này dùng để đăng tin hoặc truy vấn dữ liệu.

Lấy mã

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}" 

Phản hồi mẫu

{
  "code":"{code-for-your-client}"
}

Đổi mã lấy mã truy cập dài hạn

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.

Phản hồi mẫu

{
  "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: