Các token truy cập Facebook Oauth 2.0 có hết hạn không?


124

Tôi đang chơi xung quanh với ủy quyền Oauth 2.0 trong Facebook và tự hỏi liệu mã thông báo truy cập mà Facebook có bị hết hạn không. Nếu vậy, có cách nào để yêu cầu mã thông báo truy cập lâu dài không?


4
Để thêm một số chi tiết cho câu hỏi này: ngay cả offline_access cũng bị vô hiệu khi người dùng thay đổi mật khẩu Facebook của anh ấy / cô ấy. Vì vậy, tốt hơn hết là chơi an toàn và nhận lại mã thông báo truy cập mới nếu bạn gặp lỗi khi sử dụng mã cũ.
Hoàng Long

2
Để thêm tài liệu tham khảo: developers.facebook.com/blog/post/500
Hoàng Long

2
yo guys, tất cả các bạn chỉ đơn giản là đá. Dù câu hỏi là gì, tôi chỉ cần giải quyết nó ... Cảm ơn tất cả các bạn
vinay

3
Có vẻ như Facebook đang từ chối cấp phép offline_access vào ngày 1 tháng 5. Trong tương lai, tất cả các mã thông báo truy cập sẽ hết hạn khi hết "thời gian hết hạn" (60 ngày), người dùng thay đổi mật khẩu, người dùng ủy quyền lại ứng dụng của bạn hoặc người dùng đăng xuất. API . PS Tôi không chắc tại sao Facebook lại đặt "thời gian hết hạn" mới thành 60 ngày nếu mã thông báo truy cập vẫn hết hạn khi đăng xuất (có vẻ như người dùng có xu hướng đăng xuất tốt trong vòng 60 ngày). Có lẽ tôi đang thiếu thứ gì đó ... hết hạn
Steven Wexler

1
Hành vi access_token đang thay đổi ngay bây giờ, bạn nên tra cứu "Thay đổi đột phá" tháng 7 năm 2012 - quyền offline_access đang bị phản đối và access_token sẽ có vòng đời dài.
qodeninja

Câu trả lời:


64

Sau khi đào xung quanh một chút, tôi tìm thấy điều này. Nó dường như là câu trả lời:

Cập nhật (ngày 11 tháng 4 năm 2018)

  • Mã thông báo sẽ hết hạn sau khoảng 60 ngày.
  • Mã thông báo sẽ được làm mới một lần mỗi ngày, trong tối đa 90 ngày, khi người sử dụng ứng dụng của bạn đưa ra yêu cầu đến máy chủ của Facebook.
  • Tất cả các mã thông báo truy cập cần được gia hạn sau mỗi 90 ngày với sự đồng ý của người sử dụng ứng dụng của bạn.

Thông báo thay đổi Facebook (10/04/2018)

Trang hết hạn mã thông báo cập nhật Facebook (10/04/2018)

offline_access: Cho phép ứng dụng của bạn thực hiện các yêu cầu được ủy quyền thay mặt cho người dùng bất cứ lúc nào. Theo mặc định, hầu hết các mã thông báo truy cập hết hạn sau một khoảng thời gian ngắn để đảm bảo các ứng dụng chỉ thực hiện các yêu cầu thay mặt cho người dùng khi họ đang tích cực sử dụng ứng dụng. Quyền này làm cho mã thông báo truy cập được trả về bởi điểm cuối OAuth của chúng tôi tồn tại lâu.

Đó là một giá trị cho phép được yêu cầu.

http://developers.facebook.com/docs/authentication/permissions

CẬP NHẬT

quyền offline_access đã bị xóa cách đây một thời gian.

https://developers.facebook.com/docs/roadmap/completed-changes/offline-access-removal/


2
Để đáp ứng điều này, tôi đã bắt đầu một thư viện mã nguồn mở có thể được sử dụng cho các bạn. Đây là một lib oAuth nhằm mục đích hỗ trợ tất cả các mạng xã hội với việc triển khai oAuth. Nó đã hỗ trợ các quyền mở rộng bao gồm cả đăng bài ngoại tuyến. code.google.com/p/socialoauth
Tendrid

Ngay cả mã thông báo offline_access cũng hết hạn nếu người dùng thay đổi mật khẩu của họ trên Facebook.
Bemmu

Thật không may, nó không phải là một giải pháp "sạch" cho vấn đề hiện tại. Trước tiên hoặc tất cả yêu cầu quyền này sẽ cảnh báo người dùng về quyền bổ sung (ví dụ: ứng dụng này sẽ có thể truy cập vào tài khoản facebook của bạn bất cứ lúc nào), điều này làm tắt rất nhiều khách hàng tiềm năng. Thứ hai, nếu việc sử dụng thay đổi mật khẩu của anh ấy, mã thông báo này sẽ không hợp lệ. Vì vậy, cần phải có một cách tốt hơn (ví dụ: mã thông báo làm mới) để có được access_token mới, đặc biệt là đối với các ứng dụng web điều khiển ajax của khách hàng giàu.
Vladimir

24
Theo tài liệu api của họ offline_access sẽ không còn được hỗ trợ kể từ ngày 2 tháng 5 năm 2012.
Ben Lesh

@Tendrid Thư viện của bạn chỉ hỗ trợ Facebook và Twitter.
mareoraft

30

Hãy thử điều này có thể nó sẽ giúp đầy đủ cho bạn

https://graph.facebook.com/oauth/authorize?
    client_id=127605460617602&
scope=offline_access,read_stream,user_photos,user_videos,publish_stream&
    redirect_uri=http://www.example.com/

Để nhận được Mã thông báo truy cập trọn đời, bạn phải sử dụng scope=offline_access

Ý nghĩa của scope=offline_accessnó là: -

Cho phép ứng dụng của bạn thực hiện các yêu cầu được ủy quyền thay mặt cho người dùng bất cứ lúc nào. Theo mặc định, hầu hết các mã thông báo truy cập hết hạn sau một khoảng thời gian ngắn để đảm bảo các ứng dụng chỉ thực hiện các yêu cầu thay mặt cho người dùng khi họ đang tích cực sử dụng ứng dụng. Quyền này làm cho mã thông báo truy cập được trả về bởi điểm cuối OAuth của chúng tôi tồn tại lâu.

Nhưng theo nâng cấp trong tương lai của facebook, chức năng offline_acees sẽ không còn tồn tại mãi mãi từ ngày 3 tháng 10 năm 2012. và người dùng sẽ được cấp mã thông báo truy cập trong 60 ngày và trước khi hết hạn mã thông báo truy cập Facebook sẽ thông báo hoặc bạn có thể nhận được tùy chỉnh của mình chức năng thông báo tìm nạp giá trị hết hạn từ Api Facebook ..


10
Tôi muốn thông báo cho bạn rằng fb đã thay đổi trong api của anh ấy và hiện tại không có mã thông báo thời gian tồn tại, Hiện tại quyền truy cập ngoại tuyến sẽ hoạt động trong 60 ngày.
PrateekSaluja

21

Lưu ý rằng Facebook hiện không chấp nhận quyền offline_access có lợi cho các mã thông báo mà bạn có thể yêu cầu "nâng cấp" khi hết hạn. Bây giờ tôi chỉ tự mình giải quyết vấn đề này, vì vậy tôi không có nhiều điều để nói, nhưng tài liệu này có thể giúp:

https://developers.facebook.com/docs/offline-access-deprecation/


17

Tôi đến đây với cùng một câu hỏi như OP, nhưng các câu trả lời cho thấy việc sử dụng offline_access đang giương cờ đỏ cho tôi.

Bảo mật, việc truy cập ngoại tuyến vào tài khoản Facebook của người dùng khác biệt về mặt chất lượng và mạnh mẽ hơn nhiều so với việc chỉ sử dụng Facebook để đăng nhập một lần và không nên sử dụng một cách nhẹ nhàng (trừ khi bạn thực sự cần nó). Khi người dùng cấp quyền này, "ứng dụng" có thể kiểm tra tài khoản của người dùng từ bất cứ đâu vào bất cứ lúc nào. Tôi đặt "ứng dụng" trong ngoặc kép vì thực ra đó là bất kỳ công cụ nào có thông tin đăng nhập - bạn có thể tạo ra một bộ công cụ không liên quan gì đến máy chủ web có thể truy cập bất kỳ thông tin nào mà người dùng đã đồng ý chia sẻ với những người đó thông tin đăng nhập.

Tôi sẽ không sử dụng tính năng này để làm việc trong suốt vòng đời mã thông báo ngắn; đó không phải là mục đích của nó Thật vậy, bản thân mã thông báo trọn đời là một tính năng bảo mật. Tôi vẫn đang tìm kiếm thông tin chi tiết về cách sử dụng đúng các mã thông báo này (Tôi có thể duy trì chúng không? Tôi có nên / bảo mật chúng như thế nào không? / hoặc làm cách nào để tôi làm mới?), nhưng tôi khá chắc chắn offline_access không đúng cách.


1
cùng nghi ngờ ở đây david. bạn có tìm thấy thêm thông tin về cách bảo mật mã thông báo được lưu trữ để truy cập ngoại tuyến không?
neal aise

Tài liệu của Facebook rất tệ, nhưng tôi nghĩ tình huống là nó an toàn một cách hợp lý để duy trì mã thông báo truy cập KHÔNG thu được với offline_access. Mặc dù đúng là bất kỳ ai có quyền truy cập vào nó (trong khi người dùng FB vẫn đăng nhập) có thể làm bất cứ điều gì mà người dùng đã cấp phép cho bạn, điều đó không tệ vì các mã thông báo bị vô hiệu ngay khi người dùng đăng xuất khỏi facebook bất cứ nơi nào Đây vẫn là một lỗ hổng bảo mật (tôi thấy thật kỳ lạ khi bạn không phải cung cấp bí mật cho ứng dụng của mình theo yêu cầu / tôi), nhưng nó không phải là kết thúc mở. Nếu bất cứ ai mò mẫm điều này tốt hơn hãy sửa cho tôi.
David Pope

8

Vâng, họ hết hạn. Có một giá trị 'hết hạn' được truyền cùng với 'access_token' và từ những gì tôi có thể nói là khoảng 2 giờ. Tôi đã tìm kiếm, nhưng tôi không thấy cách nào để yêu cầu thời gian hết hạn lâu hơn.


3
Nếu bạn yêu cầu quyền 'offline_access', mã thông báo sẽ không hết hạn.
Brendan Berg

1
@Brendan: Nhưng nó sẽ bị vô hiệu ngay khi người dùng thay đổi mật khẩu Facebook của anh ấy / cô ấy
Hoàng Long

@ HoàngLong có tham khảo gì về điều này?
Charles Prakash Dasari


4

Bạn luôn có thể làm mới mã thông báo truy cập của người dùng mỗi khi người dùng đăng nhập vào trang web của bạn thông qua facebook. Quyền truy cập ngoại tuyến không thể đảm bảo bạn nhận được mã thông báo truy cập trọn đời, mã thông báo truy cập thay đổi bất cứ khi nào người dùng thu hồi quyền truy cập ứng dụng của bạn hoặc người dùng thay đổi mật khẩu của họ.

Trích dẫn từ facebook http://developers.facebook.com/docs/authentication/

Lưu ý: Nếu ứng dụng chưa yêu cầu quyền offline_access, mã thông báo truy cập bị giới hạn thời gian. Mã thông báo truy cập giới hạn thời gian cũng bị vô hiệu khi người dùng đăng xuất khỏi Facebook. Nếu ứng dụng đã nhận được sự cho phép offline_access từ người dùng, mã thông báo truy cập sẽ không hết hạn. Tuy nhiên, nó bị vô hiệu hóa bất cứ khi nào người dùng thay đổi mật khẩu của mình.

Giả sử bạn lưu trữ uid facebook của người dùng và mã thông báo truy cập trong bảng người dùng trong cơ sở dữ liệu của bạn, mỗi khi người dùng nhấp vào nút "Đăng nhập bằng facebook", bạn kiểm tra trạng thái đăng nhập bằng API Javascript, sau đó kiểm tra trạng thái kết nối từ phản hồi , nếu người dùng đã kết nối với trang web của bạn, thì bạn có thể cập nhật mã thông báo truy cập trong bảng.


3

Nhấn vào đây để trao đổi mã thông báo truy cập sống ngắn để có thời gian tồn tại lâu / không hết hạn (trang):

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 

1

đăng nhập vào tài khoản facebook và chỉnh sửa cài đặt ứng dụng của bạn (tài khoản -> cài đặt ứng dụng -> quyền bổ sung của ứng dụng sử dụng tài khoản của bạn). bỏ chọn quyền (Truy cập dữ liệu của tôi khi tôi không sử dụng ứng dụng (offline_access)). Sau đó, khuôn mặt sẽ phát hành một mã thông báo mới khi bạn đăng nhập vào ứng dụng.



0

kiểm tra những điều sau đây khi bạn tương tác với api biểu đồ facebook.

1) URL kết nối ứng dụng phải là cơ sở của URL kết nối "redirect_uri" của bạn: - www.x-minds.org/fb/connect/ redirect_uri - www.x-minds.org/fb/connect/redirect 2) "redirect_uri" của bạn "phải giống nhau trong cả hai trường hợp (khi bạn yêu cầu mã xác minh và yêu cầu access_token) redirect_uri - www.x-minds.org/fb/connect/redirect 3), bạn nên mã hóa đối số khi bạn yêu cầu access_token 4) không nên vượt qua đối số (type = client_cred) khi bạn yêu cầu access_token. máy chủ ủy quyền sẽ phát hành mã thông báo mà không có phần phiên. chúng ta không thể sử dụng mã thông báo này với bí danh "tôi" trong biểu đồ api. Mã thông báo này sẽ có độ dài (40) nhưng mã thông báo có phần phiên sẽ có độ dài (81). Mã thông báo truy cập không có phần phiên sẽ hoạt động với một số trường hợp

ví dụ: - https://graph.facebook.com/ ? access_token = 116122545078207 | EyWJJYqrdgQgV1bfueck320z7MM. Nhưng API đồ thị với bí danh "tôi" sẽ chỉ hoạt động với mã thông báo với phần phiên.


0

Tôi không biết chính xác khi nào mã thông báo hết hạn, nhưng họ sẽ làm, nếu không sẽ không có tùy chọn để cấp quyền ngoại tuyến.

Dù sao, đôi khi yêu cầu người dùng cấp quyền ngoại tuyến là một việc quá mức cần thiết. Tùy thuộc vào nhu cầu của bạn, có thể đủ để mã thông báo vẫn còn hiệu lực miễn là trang web được mở trong trình duyệt của người dùng. Đối với điều này, có thể có một giải pháp đơn giản hơn - đăng nhập lại người dùng theo định kỳ bằng cách sử dụng iframe: facebook tự động đăng nhập lại từ cookie php

Đã làm cho tôi...


0

Đây là một vài năm sau đó, nhưng Facebook Graph API Explorer hiện có một biểu tượng thông tin nhỏ bên cạnh mã thông báo truy cập cho phép bạn truy cập ứng dụng công cụ mã thông báo truy cập và mở rộng mã thông báo API trong một vài tháng. Có thể hữu ích trong quá trình phát triển.

nhập mô tả hình ảnh ở đây

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.