Mã truy cập

Khi ai đó kết nối với một ứng dụng bằng Đăng nhập Facebook, ứng dụng đó có thể lấy mã truy cập cung cấp quyền truy cập tạm thời, an toàn vào API Facebook.

Mã truy cập là một chuỗi không rõ xác định người dùng, ứng dụng hoặc Trang và ứng dụng có thể dùng mã đó để thực hiện lệnh gọi API đồ thị. Bạn có thể lấy mã truy cập bằng nhiều phương thức. Phần sau của tài liệu này sẽ nêu từng phương thức. Mã bao gồm thông tin về thời gian mã sẽ hết hạn và ứng dụng đã tạo mã đó. Vì kiểm tra quyền riêng tư, phần lớn các lệnh gọi API trên Facebook đều cần có mã truy cập. Mã truy cập có các loại khác nhau để hỗ trợ các trường hợp sử dụng khác nhau:

Loại mã truy cập Mô tả

Mã truy cập người dùng

Mã người dùng là loại mã được sử dụng phổ biến nhất. Bạn cần có loại mã truy cập này bất cứ khi nào ứng dụng gọi API để đọc, sửa đổi hoặc ghi dữ liệu Facebook của một người cụ thể thay mặt họ. Bạn thường lấy được mã truy cập người dùng qua hộp thoại đăng nhập và cần một người cho phép ứng dụng lấy mã đó.

Mã truy cập ứng dụng

Bạn cần loại mã truy cập này để sửa đổi và đọc cài đặt ứng dụng. Mã này cũng có thể dùng để đăng hành động trong Open Graph. Mã này được tạo bằng một khóa bí mật thỏa thuận trước giữa ứng dụng và Facebook rồi được dùng trong lệnh gọi thay đổi cài đặt trong ứng dụng. Bạn lấy mã truy cập ứng dụng qua một lệnh gọi máy chủ đến máy chủ.

Mã truy cập Trang

Những mã truy cập này tương tự như mã truy cập người dùng, ngoại trừ mã này cấp quyền cho các API đọc, ghi hoặc sửa đổi dữ liệu thuộc về một Trang Facebook. Để lấy mã truy cập trang, bạn cần bắt đầu bằng cách lấy mã truy cập người dùng rồi yêu cầu quyền manage_pages. Sau khi có mã truy cập người dùng, bạn sẽ lấy mã truy cập trang qua API Đồ thị.

Mã ứng dụng

Mã ứng dụng là một số nhận dạng mà bạn có thể nhúng vào các mã nhị phân di động gốc hoặc ứng dụng trên máy tính để xác định ứng dụng của mình. Mã ứng dụng không phải là một số nhận dạng bí mật vì mã này được nhúng trong ứng dụng. Mã ứng dụng được dùng để truy cập các API cấp ứng dụng, nhưng chỉ một nhóm phụ rất giới hạn. Mã ứng dụng có trong bảng điều khiển ứng dụng của bạn. Vì mã ứng dụng hiếm khi được dùng, chúng tôi sẽ không nói về mã đó trong tài liệu này. Thay vào đó, mã đó sẽ được nêu trong mọi tài liệu về API dùng mã ứng dụng.

Tạo mã truy cập

- Mã truy cập người dùng

- Mã truy cập ứng dụng

- Mã truy cập Trang


Mã truy cập người dùng

Mặc dù mỗi nền tảng tạo mã truy cập thông qua các API khác nhau, tất cả nền tảng đều tuân theo chiến lược cơ bản để có mã người dùng:

Các nền tảng khác nhau có những phương thức kích hoạt quy trình này khác nhau và có chức năng quản lý mã truy cập thay mặt nhà phát triển và người cấp quyền:

Javascript

SDK Facebook dành cho Javascript tự động lấy và lưu trữ mã truy cập người dùng trong cookie trình duyệt. Bạn có thể truy xuất mã truy cập người dùng bằng cách thực hiện lệnh gọi đến FB.getAuthResponse sẽ bao gồm thuộc tính accessToken trong phản hồi.

Android

SDK Facebook dành cho Android tự động quản lý các mã truy cập người dùng thông qua lớp com.facebook.AccessToken. Bạn có thể tìm hiểu thêm về cách lấy mã truy cập người dùng bằng cách triển khai Đăng nhập Facebook dành cho Android. Bạn có thể truy xuất mã truy cập người dùng bằng cách kiểm tra Session.getCurrentAccessToken.

iOS

SDK Facebook dành cho iOS tự động quản lý các mã truy cập người dùng thông qua lớp FBSDKAccessToken. Bạn có thể tìm hiểu thêm về cách lấy mã truy cập người dùng bằng cách triển khai Đăng nhập Facebook dành cho iOS. Bạn có thể truy xuất mã truy cập bằng cách kiểm tra FBSDKAccessToken.currentAccessToken.

Web (không có JavaScript)

Khi tạo ứng dụng trên web mà không có SDK Facebook dành cho Javascript, bạn cần tạo một mã truy cập bằng các bước được nêu trong tài liệu đó.

Mẫu mã

Android

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    FacebookSdk.sdkInitialize(this.getApplicationContext());
    accessToken = AccessToken.getCurrentAccessToken();
}

iOS

- (void)viewDidLoad
{
  [super viewDidLoad];
  NSString *accessToken = [FBSDKAccessToken currentAccessToken];
}

JavaScript (Web)

FB.getLoginStatus(function(response) {
  if (response.status === 'connected') {
    var accessToken = response.authResponse.accessToken;
  } 
} );

Mã ngắn hạn và mã dài hạn

Mã truy cập người dùng có 2 dạng: mã ngắn hạn và mã dài hạn. Mã ngắn hạn thường có thời hạn khoảng 1 hoặc 2 giờ trong khi mã dài hạn thường có thời hạn khoảng 60 ngày. Các thời hạn này sẽ không giữ nguyên, bạn không nên dựa vào đó - thời hạn có thể thay đổi mà không có cảnh báo hoặc có thể hết hạn sớm. Xem thêm trong xử lý lỗi.

Mã truy cập được tạo qua đăng nhập web là mã ngắn hạn nhưng bạn có thể chuyển các mã đó thành mã dài hạn bằng cách thực hiện lệnh gọi API phía máy chủ cùng với khóa bí mật của ứng dụng.

Các ứng dụng di động dùng SDK iOS và Android của Facebook có mã dài hạn theo mặc định.

Ứng dụng có Quyền truy cập tiêu chuẩn vào API Tiếp thị của Facebook khi dùng mã dài hạn sẽ nhận được mã dài hạn không có thời hạn. Những mã này vẫn bị vô hiệu hóa vì các lý do khác nhưng sẽ không hết hạn chỉ dựa trên thời gian. Điều này cũng đúng đối với mã truy cập cho Người dùng hệ thống trong Trình quản lý doanh nghiệp.

Mã có tính linh hoạt

Một khía cạnh quan trọng cần hiểu về mã truy cập là mã này có tính linh hoạt. Sau khi có mã truy cập, bạn có thể sử dụng mã này để thực hiện lệnh gọi từ ứng dụng di động, trình duyệt web hoặc từ máy chủ của bạn đến máy chủ của Facebook. Nếu mã được lấy trên ứng dụng, bạn có thể chuyển mã đó xuống máy chủ và dùng trong lệnh gọi máy chủ đến máy chủ. Nếu mã được lấy qua lệnh gọi máy chủ, bạn cũng có thể chuyển mã đó lên một ứng dụng rồi thực hiện lệnh gọi từ ứng dụng đó.

Việc chuyển mã giữa ứng dụng và máy chủ phải được thực hiện an toàn qua HTTPS để đảm bảo an toàn cho tài khoản của mọi người. Đọc thêm về những điều liên quan trong việc chuyển mã giữa ứng dụng và máy chủ.

Mã truy cập ứng dụng

Mã truy cập ứng dụng được dùng để tạo yêu cầu đến API Facebook thay mặt ứng dụng hơn là người dùng. Mã này có thể dùng để sửa đổi thông số của ứng dụng, tạo và quản lý người dùng ứng dụng hoặc đọc thông tin chi tiết của ứng dụng.

Giới hạn

Một số dữ liệu người dùng thường hiển thị với ứng dụng tạo yêu cầu với mã truy cập người dùng không phải luôn hiển thị với mã truy cập ứng dụng. Nếu đang đọc dữ liệu người dùng và dùng mã đó trong ứng dụng, bạn nên sử dụng mã truy cập người dùng thay vì mã truy cập ứng dụng.

Mã truy cập ứng dụng bị coi là không an toàn nếu ứng dụng được đặt thành Native/Desktop trong cài đặt Nâng cao của Bảng điều khiển ứng dụng và do đó sẽ không hoạt động với các lệnh gọi API. Đó là vì chúng tôi giả thuyết rằng ứng dụng gốc hoặc ứng dụng trên máy tính sẽ được nhúng khóa bí mật của ứng dụng ở đâu đó (và do đó mã truy cập ứng dụng được tạo bằng khóa bí mật đó không an toàn).

Tạo mã truy cập ứng dụng

Để tạo mã truy cập ứng dụng, bạn cần thực hiện lệnh gọi API Đồ thị:

GET /oauth/access_token
    ?client_id={app-id}
    &client_secret={app-secret}
    &grant_type=client_credentials

Lệnh gọi này sẽ trả về một mã truy cập ứng dụng có thể dùng thay thế mã truy cập người dùng để thực hiện lệnh gọi API như đã nói ở trên. Một lần nữa, để bảo mật, mã truy cập ứng dụng không bao giờ được viết cứng trong mã phía ứng dụng, làm như vậy sẽ khiến mọi người đã tải trang web hoặc giải mã ứng dụng của bạn có toàn quyền truy cập vào khóa bí mật của ứng dụng và do đó có khả năng sửa đổi ứng dụng của bạn. Điều này ngụ ý rằng phần lớn thời gian, bạn sẽ chỉ sử dụng mã truy cập ứng dụng trong lệnh gọi máy chủ đến máy chủ.

Lưu ý rằng vì yêu cầu này sử dụng khóa bí mật của ứng dụng, không bao giờ được tạo khóa này trong mã phía ứng dụng hoặc trong mã nhị phân của ứng dụng mà có thể giải mã. Điều quan trọng là không bao giờ được chia sẻ khóa bí mật của ứng dụng với bất kỳ ai. Do đó, chỉ nên thực hiện lệnh gọi API này bằng mã phía máy chủ.

Có một phương thức khác để thực hiện lệnh gọi đến API Đồ thị không yêu cầu sử dụng mã truy cập ứng dụng được tạo. Bạn chỉ cần chuyển id ứng dụng và khóa bí mật của ứng dụng như thông số access_token khi thực hiện lệnh gọi:

https://graph.facebook.com/endpoint?key=value&access_token=app_id|app_secret

Lựa chọn sử dụng mã truy cập được tạo và phương thức này phụ thuộc vào nơi bạn giấu khóa bí mật của ứng dụng.

Mã truy cập Trang

Mã truy cập trang được sử dụng trong lệnh gọi API Đồ thị để quản lý Trang Facebook. Để tạo mã truy cập trang, quản trị viên trang phải cấp một quyền mở rộng gọi là manage_pages. Sau khi được cấp quyền này, bạn có thể truy xuất mã truy cập trang bằng cách sử dụng mã truy cập người dùng có quyền được yêu cầu và yêu cầu API Đồ thị sau đây:

GET /me/accounts HTTP/1.1
Host: graph.facebook.com

Hành động này sẽ trả về danh sách các trang mà người đó quản trị cùng với thông tin khác về Trang, chẳng hạn như danh mục Trang, các quyền của quản trị viên với Trang đó cũng như mã truy cập trang:

{
  "data": [
    {
      "category": "Product/service",
      "name": "Sample Page",
      "access_token": "{access-token}",
      "id": "1234567890",
      "perms": [
        "ADMINISTER",
        "EDIT_PROFILE",
        "CREATE_CONTENT",
        "MODERATE_CONTENT",
        "CREATE_ADS",
        "BASIC_ADMIN"
      ]
    }, 
}

Với mã truy cập trang, bạn có thể thực hiện các lệnh gọi API thay cho Trang. Ví dụ: bạn có thể đăng nội dung cập nhật trạng thái lên một Trang (hơn là trên dòng thời gian của người dùng) hoặc đọc dữ liệu Thông tin chi tiết Trang.

Mã truy cập trang là duy nhất cho mỗi Trang, quản trị viên và ứng dụng.

Quản trị viên trang có các vai trò khác nhau, thể hiện ở chuỗi perms được trả về như trong ví dụ trên. Chức năng khả dụng cho họ được quyết định dựa trên các giá trị perms được mô tả trong Mã & vai trò.