Mã thông báo truy cập FB lâu dài cho máy chủ để lấy thông tin trang FB


114

Tôi biết rằng có rất nhiều câu hỏi về mã thông báo truy cập Facebook và nỗi đau mà chúng gây ra, nhưng mặc dù đã thử nghiệm nhiều và đọc nhiều bài báo blog mơ hồ khó chịu (FB và những thứ khác), tôi vẫn đang đấu tranh để có được câu trả lời rõ ràng cho nhu cầu của mình . Hãy để tôi phân tích ngắn gọn quy trình của tôi cho đến nay:

  • Tôi đang tạo một trang web, phía máy chủ, cần lấy các bài đăng / trạng thái từ một Trang Facebook
  • Tôi là quản trị viên của Trang Facebook đó
  • Tôi đã tạo một ứng dụng Facebook
  • Bằng cách sử dụng Trình khám phá API đồ thị của Facebook , tôi đã tạo một khóa tồn tại ngắn hạn, được kết nối với ứng dụng và tài khoản của tôi, cấp quyền cho tài khoản của tôi để xem các mã truy cập cho các trang của tôi
  • Tôi đã chuyển đổi khóa tồn tại ngắn hạn của mình thành khóa tồn tại lâu (60 ngày) ala kịch bản 4 từ điều này

Và đây là nơi tôi đang mắc kẹt. Khóa 60 ngày của tôi hoạt động tốt để máy chủ của tôi lấy thông tin cần thiết từ trang, nhưng theo tôi có thể nói, không có cách nào để kéo dài khóa 60 ngày đó theo lập trình. Tôi cũng không biết cách tạo một khóa ngắn hạn mới mà không cần vào Facebook Graph API Explorer và tạo khóa theo cách thủ công.

Vì máy chủ của tôi thực hiện các yêu cầu đối với API Facebook chứ không phải hệ thống dựa trên người dùng (nơi tôi có thể dễ dàng yêu cầu người dùng cấp phép lại ứng dụng Facebook), điều này tạo ra một hệ thống rất rắc rối. Vì Facebook không được dùng nữa offline_access, thực sự không có cách nào vĩnh viễn để máy chủ của tôi lấy thông tin từ trang của chính tôi? Tôi có thực sự phải tạo khóa mới bằng tay và cập nhật thủ công máy chủ của mình với nó sau mỗi 60 ngày không?

Hay có điều gì đó tôi đang thiếu?

Cập nhật:

Hướng dẫn từng bước trước đây được tìm thấy ở đây đã được chuyển xuống thành câu trả lời của riêng nó .


Điều này thật tuyệt. Tôi đang ở trong tình huống tương tự và đang tìm kiếm một số thông tin về chủ đề này. Có an toàn không khi mã thông báo này không vi phạm bất kỳ chính sách nào của nền tảng FB? Chỉ yêu cầu để chắc chắn.
onigunn

2
Tài liệu riêng của @asrijaal Facebook (hãy xem Kịch bản 5) nói rằng các mã thông báo truy cập trang này không hết hạn. Tôi cho rằng thật an toàn khi cho rằng họ tuân thủ các chính sách của Facebook.
redhotvengeance

"Tôi nghĩ rằng nó sẽ được tốt để lại một bước-by-step quy trình rõ ràng" - trời cấm :) Cảm ơn @redhotvengeance
Steve McGill

Bạn có lỗi đánh máy với url mã thông báo truy cập trang của mình. Nên a? không phải là một & sau tài khoản. Đã dành một thời gian để cố gắng tìm ra lý do tại sao điều này không hoạt động. : P
Joren

@Joren Thật vậy - nó đã được sửa ngay bây giờ. Cảm ơn!
redhotvengeance

Câu trả lời:


188

Đây là các bước trước đây trong câu hỏi - chúng đã được chuyển sang câu trả lời này.

Nhận thấy rằng có thể tạo Mã truy cập trang Facebook không hết hạn (với sự trợ giúp từ @Igy), đây là một câu hỏi rõ ràng, từng bước cho tất cả những người đang tìm kiếm cùng một mục đích:

  1. Đảm bảo bạn là quản trị viên của trang FB mà bạn muốn lấy thông tin từ đó
  2. Tạo ứng dụng FB (phải có cùng tài khoản người dùng là quản trị viên trang)
  3. Đi tới Trình khám phá API đồ thị của Facebook
  4. Ở trên cùng bên phải, chọn Ứng dụng FB bạn đã tạo từ danh sách thả xuống "Ứng dụng"
  5. Nhấp vào "Nhận mã thông báo truy cập"
  6. Đảm bảo rằng bạn thêm manage_pagesquyền
  7. Chuyển đổi mã thông báo truy cập tồn tại ngắn hạn này thành mã thông báo tồn tại lâu dài bằng cách thực hiện lệnh gọi API Đồ thị này: https://graph.facebook.com/oauth/access_token?client_id=<your FB App ID >&client_secret=<your FB App secret>&grant_type=fb_exchange_token&fb_exchange_token=<your short-lived access token>
  8. Lấy lại mã thông báo truy cập tồn tại lâu dài mới được trả lại
  9. Thực hiện cuộc gọi API Đồ thị để xem các tài khoản của bạn bằng cách sử dụng mã thông báo truy cập tồn tại lâu dài mới: https://graph.facebook.com/me/accounts?access_token=<your long-lived access token>
  10. Lấy access_tokentrang mà bạn sẽ lấy thông tin từ đó
  11. Lint mã thông báo để thấy rằng nó được đặt thành Expires: Never!

Nên làm vậy. Bây giờ bạn sẽ có Mã truy cập trang Facebook chưa hết hạn, trừ khi:

  • Bạn thay đổi mật khẩu tài khoản Facebook của mình
  • Bạn mất quyền truy cập quản trị cho trang mục tiêu
  • Bạn xóa hoặc hủy cấp quyền cho Ứng dụng Facebook của mình

Bất kỳ điều nào trong số này sẽ làm cho mã thông báo truy cập trở nên không hợp lệ.

Nếu bạn đang nhận được (#100) Tried accessing nonexisting field (accounts) on node type (Page), hãy đi tới Trình gỡ lỗi mã thông báo truy cập , sao chép giá trị của User IDvà sử dụng giá trị đó để thay thế phần "tôi" của URL trong bước 9.


2
Tôi thực hiện bước 6 như thế nào và ở đâu?
Stefan Müller

5
@ StefanMüller Khi bạn nhấp vào "Nhận mã thông báo truy cập" trên trang Graph API Explorer, hộp thoại "Chọn quyền" sẽ bật lên. Các manage_pagestùy chọn là dưới Extended Permissionstab.
redhotvengeance

2
Tuyệt quá! Điều này hoạt động như một sự quyến rũ và được xuất bản dưới dạng TRANG, không phải với tư cách người dùng.
Benjamin Piette

3
Tôi tin rằng điều này đã lỗi thời. và bạn chỉ nhận được mã thông báo truy cập sẽ hết hạn sau khoảng hai tháng.
Qaiser Wali

7
Tôi đã làm tất cả những điều đó bây giờ và nó hoạt động ngoại trừ việc id mã thông báo tồn tại lâu dài sẽ hết hạn sau 2 tháng và không phải là vô hạn. Ngoài ra, Trình gỡ lỗi mã thông báo Acces có một liên kết ở cuối biểu mẫu để mở rộng mã thông báo truy cập tồn tại trong thời gian ngắn thành mã thông báo truy cập tồn tại lâu dài.
SlimIT

15

Điều này được đề cập trong tài liệu ngừng sử dụng Truy cập ngoại tuyến

Sử dụng mã thông báo 60 ngày để quản trị viên trang truy xuất Mã thông báo truy cập trang (qua /PAGE_ID?fields=access_tokenhoặc /me/accounts) - mã thông báo truy cập trang sẽ không có thời hạn sử dụng


5
Thở dài. Thật vậy, đây có vẻ là vé. Tôi có thể thề rằng tôi đã thử mọi cách kết hợp có thể của các bước này - rõ ràng là tôi đã bỏ lỡ bước thực sự hiệu quả. Thật là một tập hợp các hành động bắt buộc hoàn toàn phức tạp. Cảm ơn nhiều vì sự giúp đỡ của bạn!
redhotvengeance

1
Rất nhiều phần trên internet, đây là một phần thực sự hoạt động.
Ernesto

Có cách nào tồn tại để có được 60 ngày này page_access_tokenbằng mã trong javascript không? Giống như cách nhận user_access_token> FB.getAuthResponse()['accessToken'];Cảm ơn!
Tulon

3

Một cách tiếp cận hoạt động vào năm 2019

Gần đây tôi đang cố gắng đạt được điều gì đó tương tự (với trường hợp sử dụng được mô tả trong chủ đề này), nhưng tôi muốn đảm bảo tôn trọng các chính sách hiện tại của Facebook, vì vậy tôi đã thực hiện một nghiên cứu nhỏ và ở đây tôi đang chia sẻ những gì tôi tìm thấy.

Trường hợp sử dụng của tôi

Vì vậy, như tôi đã nói, trường hợp sử dụng của tôi rất giống với trường hợp được mô tả ở đây; đó là:

  • Tôi đang làm một số công việc cho một khu học chánh.
  • Họ đang sử dụng một công cụ phần mềm để quản lý hầu hết mọi thứ liên quan đến giao thông đi học.
  • Công cụ đó cho phép họ gửi thông báo qua email (cho người đăng ký) khi họ xuất bản cảnh báo trễ xe buýt và cảnh báo đóng cửa trường học.
  • Rất nhiều người trong cộng đồng theo dõi tổ chức trên trang Facebook của họ và đó là nơi duy nhất họ tìm kiếm những cảnh báo đó.
  • Vì vậy, một nhân viên của tổ chức phải tự xuất bản từng thông báo trên trang Facebook (ngoài việc tạo thông báo trong phần mềm giao thông vận tải). Hơn nữa, những thông báo đó cuối cùng sẽ hết hạn (hoặc đơn giản là bị xóa trước khi hết hạn), vì vậy nhân viên phải quay lại sau đó để xóa chúng theo cách thủ công.
  • Đó là thời gian eo hẹp, vì vậy những gì chúng tôi đang cố gắng làm ở đây là phát triển một hệ thống đơn giản, định kỳ thăm dò cơ sở dữ liệu của công cụ phần mềm để tìm các thông báo mới (và hết hạn) và cập nhật chúng (tức là thêm và xóa) trên trang Facebook.

Theo quan điểm của tôi, đây là một trường hợp sử dụng hợp pháp, nhưng tôi không chắc làm thế nào để triển khai nó theo cách phù hợp với chính sách của Facebook.

Câu trả lời được chấp nhận

Tôi đã làm theo các bước của câu trả lời được chấp nhận và nó hoạt động, ngoại trừ mọi thứ dường như đã thay đổi: bây giờ, mặc dù mã thông báo trang được tạo không hết hạn, access to datanhưng sẽ hết hạn sau khoảng 60 ngày. Bạn cũng sẽ thấy điều đó nếu bạn làm theo quy trình và kiểm tra mã thông báo trang trong Công cụ gỡ lỗi mã thông báo FB .

Bên cạnh đó, việc các mã thông báo trang được tạo ra được gắn với tài khoản người dùng cũng là một điều không may, vì nếu người dùng cập nhật mật khẩu của mình, thì mã thông báo trang cũng bị vô hiệu.

Làm thế nào để làm điều đó vào năm 2019

Sau vài giờ nghiên cứu, tôi tình cờ xem được bài viết tài liệu sau của Facebook: Đăng nhập doanh nghiệp dành cho doanh nghiệp trực tiếp .

Hóa ra là bây giờ có thể, làm theo các bước được mô tả trong bài viết trên, để tạo mã thông báo trang không được liên kết với bất kỳ tài khoản người dùng Facebook cụ thể nào và sẽ không hết hạn (trừ khi Ứng dụng FB bị xóa hoặc mã thông báo ứng dụng cơ bản bị xóa, bạn biết đấy ...)

Vì vậy, đây là các bước và các phần quan trọng nhất:

  • Bạn cần có tài khoản Trình quản lý doanh nghiệp .
    • Việc xác minh sẽ được yêu cầu và phải ký hợp đồng kỹ thuật số.
  • Bạn cần thêm trang Facebook mục tiêu vào tài khoản đó.
  • Bạn cần tạo Ứng dụng Facebook và chuyển ứng dụng đó sang cùng tài khoản Trình quản lý doanh nghiệp.
  • Ứng dụng sẽ phải trải qua quá trình xem xét của Facebook, vì sẽ cần các quyền sau: manage_pagespublish_pages.
    • Lưu ý quan trọng Để các bài đăng được thực hiện bằng cách sử dụng mã thông báo trang tạo để hiển thị cho người dùng không phải quản trị viên ứng dụng, ứng dụng đó sẽ cần phải được xuất bản và phê duyệt.
    • Bạn vẫn có thể thử nghiệm khái niệm này mà không cần gửi đánh giá, nhưng các bài đăng sẽ không được hiển thị công khai.
  • Trong tài khoản Trình quản lý doanh nghiệp (chỉ sau khi ứng dụng và trang của bạn đã được thêm vào tài khoản), bạn cần tạo cái được gọi là Người dùng hệ thống và cấp cho người dùng đó vai trò quản trị viên (hoặc quyền) cho trang Facebook mục tiêu.
    • Người dùng hệ thống thuộc sở hữu của tài khoản Trình quản lý doanh nghiệp và không bị ràng buộc với một người dùng cụ thể. Hiểu biết hiện tại của tôi là một trường hợp sử dụng chính đối với người dùng hệ thống là quyền truy cập có lập trình vào API Đồ thị của Facebook (chỉ những gì chúng tôi cần).
  • Sau đó, đối với người dùng hệ thống đó, bạn cần tạo mã thông báo truy cập (mã này sẽ không bao giờ hết hạn). Bạn sẽ được nhắc chọn ứng dụng nào. Sau đó, bạn sẽ chọn ứng dụng mục tiêu của mình.
  • Sau đó, bạn sẽ cần sử dụng mã thông báo ứng dụng đã tạo để tạo mã thông báo trang, mã này cũng sẽ không bao giờ hết hạn. Quy trình được mô tả trong bài viết này là:
GET /<PAGE_ID>?fields=access_token&access_token=<SYSTEM_USER_ACCESS_TOKEN>
  • Đó là nó.

Mã thông báo đó sẽ không bao giờ hết hạn và nó sẽ không bị ràng buộc với một người dùng Facebook cụ thể, vì vậy nó chính xác là thứ chúng ta cần!

Phần cuối cùng là đảm bảo rằng ứng dụng Facebook của bạn được Facebook phê duyệt. Trên thực tế, đó là phần quan trọng nhất, vì toàn bộ quy trình sẽ vô giá trị nếu mọi người không nhìn thấy bài đăng của chúng tôi.

Tôi muốn biết chắc chắn rằng tôi có thể dựa vào quy trình trên để xây dựng thứ gì đó cho khách hàng của mình mà không bị Facebook từ chối cuối cùng, vì vậy, trước (tức là trước khi bắt đầu thực hiện dự án của khách hàng), tôi đã trải qua toàn bộ quá trình tạo trang, ứng dụng, tài khoản Trình quản lý doanh nghiệp, v.v. Tôi đã xác minh doanh nghiệp của mình. Tôi đã gửi ứng dụng của mình để được xem xét. Trong yêu cầu của tôi, tôi đã trình bày rất cụ thể về trường hợp sử dụng của mình và nhấn mạnh rằng ứng dụng là để "tự sử dụng" (tức là tổ chức đang phát triển một ứng dụng cho chính họ, không phải cho những người dùng Facebook khác). Tôi đã được chấp thuận trong vòng 24 giờ.

Một số lưu ý khác về quy trình đánh giá ứng dụng:

  • Tôi đã phải chọn một nền tảng cho ứng dụng, vì vậy tôi đã chọn trang web .
  • Tôi phải chỉ ra lý do tại sao ứng dụng cần hai quyền và cách ứng dụng sẽ sử dụng chúng.
  • Tôi phải cho biết lý do tại sao người đánh giá không thể đăng nhập vào ứng dụng của tôi và dùng thử nó (tức là vì ứng dụng sẽ được sử dụng bởi một quy trình của nhân viên).
  • Đối với các video truyền hình bắt buộc, tôi chỉ đơn giản trình bày các thao tác thủ công trong thiết bị đầu cuối bằng cách sử dụng curltiện ích (để tạo mã thông báo trang và tạo bài đăng lên trang Facebook). Tôi cũng cho thấy cách tôi đang sử dụng Trình quản lý doanh nghiệp để liên kết người dùng hệ thống với trang và tạo mã thông báo, v.v.
  • Một lần nữa, tôi đã nói rất cụ thể về trường hợp sử dụng của mình và tôi nghĩ rằng điều đó đã giúp ích.

Tôi hy vọng thông tin này sẽ hữu ích cho những người có trường hợp sử dụng tương tự.


1

Rất cảm ơn @redhotvengeance về hướng dẫn từng bước.

Sau một thời gian, bây giờ có mô tả rõ ràng trong tài liệu của Facebook:

https://developers.facebook.com/docs/facebook-login/access-tokens/expiration-and-extension

Mở rộng mã thông báo truy cập trang

Các ứng dụng có thể truy xuất mã thông báo truy cập trang từ người dùng quản trị Trang khi họ xác thực bằng quyền management_pages. Nếu mã thông báo truy cập người dùng được sử dụng để truy xuất mã thông báo truy cập trang này tồn tại trong thời gian ngắn, mã thông báo truy cập trang cũng sẽ tồn tại trong thời gian ngắn.

Để có được mã thông báo truy cập trang tồn tại lâu hơn, hãy trao đổi mã thông báo truy cập của Người dùng để có được mã tồn tại lâu hơn, như trên, sau đó yêu cầu mã thông báo truy cập Trang. Mã thông báo truy cập trang kết quả sẽ không có thời gian hết hạn.


0

Bạn cũng có thể sao chép và quá khứ từ bảng điều khiển ứng dụng trên facebook. Các bước:

  1. Tới https://developers.facebook.com

  2. Chọn ứng dụng của bạn ở góc trên cùng bên phải của trang (ảnh của ứng dụng trông như thế nào)

  3. Nhấp vào Messenger từ các tùy chọn ở bên trái (nó sẽ tự động chuyển sang cài đặt) (hình ảnh của nó trông như thế nào)
  4. Chuyển đến phần "Tạo mã thông báo" trong trang. Chọn trang bạn muốn tạo mã thông báo. (ảnh của phần đó trông như thế nào)
  5. Sao chép và dán mã thông báo trang của bạn bất cứ khi nào bạn cần.

Hãy nhớ rằng về lý thuyết, mã thông báo của bạn sẽ không hết hạn, nó được liên kết trực tiếp với tài khoản facebook mà bạn đã đăng nhập. Vì vậy, giả sử bạn thay đổi mật khẩu của mình hoặc bạn xóa quyền giữa tài khoản và ứng dụng của mình thì mã thông báo của bạn sẽ không còn hiệu lực nữa.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.