โทเค็นการเข้าถึง Facebook Oauth 2.0 หมดอายุหรือไม่


124

ฉันกำลังเล่นกับการอนุญาต Oauth 2.0 ใน Facebook และรู้สึกสงสัยว่าโทเค็นการเข้าถึง Facebook จะหมดอายุหรือไม่ ถ้าเป็นเช่นนั้นมีวิธีขอโทเค็นการเข้าถึงที่มีอายุการใช้งานยาวนานหรือไม่?


4
หากต้องการเพิ่มรายละเอียดบางอย่างให้กับคำถามนี้: แม้แต่ Offline_access ก็ยังไม่ถูกต้องเมื่อผู้ใช้เปลี่ยนรหัสผ่าน Facebook ของตน ดังนั้นจึงเป็นการดีกว่าที่จะเล่นอย่างปลอดภัยและรับโทเค็นการเข้าถึงใหม่อีกครั้งหากคุณได้รับข้อผิดพลาดเมื่อใช้อันเก่า
Hoàng Long

2
หากต้องการเพิ่มข้อมูลอ้างอิง: developers.facebook.com/blog/post/500
Hoàng Long

2
พวกคุณทุกคนก็แค่ร็อค ไม่ว่าคำถามคืออะไรฉันจะได้รับการแก้ไข ... ขอบคุณทุกคน
vinay

3
ดูเหมือนว่า Facebook จะเลิกใช้การอนุญาต offline_access ในวันที่ 1 พฤษภาคม ในอนาคตโทเค็นการเข้าถึงทั้งหมดจะหมดอายุเมื่อ "หมดอายุ" (60 วัน) หมดลงผู้ใช้เปลี่ยนรหัสผ่านผู้ใช้ยกเลิกการอนุญาตแอปของคุณหรือผู้ใช้ออกจากระบบ API ป.ล. ฉันไม่แน่ใจว่าทำไม Facebook จึงตั้งค่า "เวลาหมดอายุ" ใหม่เป็น 60 วันหากโทเค็นการเข้าถึงจะยังคงหมดอายุเมื่อออกจากระบบ (ดูเหมือนว่าผู้ใช้มักจะออกจากระบบภายใน 60 วัน) บางทีฉันอาจจะขาดอะไรไป ... หมดอายุ
Steven Wexler

1
ขณะนี้พฤติกรรม access_token กำลังเปลี่ยนแปลงคุณควรค้นหา "Breaking Changes" ในเดือนกรกฎาคม 2012 ซึ่งกำลังเลิกใช้งานสิทธิ์ offline_access และ access_token จะมีอายุการใช้งานยาวนาน
qodeninja

คำตอบ:


64

หลังจากขุดไปรอบ ๆ ฉันก็พบสิ่งนี้ ดูเหมือนจะเป็นคำตอบ:

อัปเดต (11 / เมษายน / 2018)

  • โทเค็นจะหมดอายุหลังจากนั้นประมาณ 60 วัน
  • โทเค็นจะรีเฟรชวันละครั้งเป็นเวลาสูงสุด 90 วันเมื่อบุคคลที่ใช้แอพของคุณส่งคำขอไปยังเซิร์ฟเวอร์ของ Facebook
  • โทเค็นการเข้าถึงทั้งหมดจะต้องต่ออายุทุกๆ 90 วันโดยได้รับความยินยอมจากบุคคลที่ใช้แอพของคุณ

ประกาศการเปลี่ยนแปลง Facebook (10/04/2018)

Facebook อัปเดตหน้าการหมดอายุโทเค็น (10/04/2018)

Offline_access: เปิดใช้งานแอปพลิเคชันของคุณเพื่อดำเนินการตามคำขอที่ได้รับอนุญาตในนามของผู้ใช้เมื่อใดก็ได้ โดยค่าเริ่มต้นโทเค็นการเข้าถึงส่วนใหญ่จะหมดอายุหลังจากช่วงเวลาสั้น ๆ เพื่อให้แน่ใจว่าแอปพลิเคชันจะส่งคำขอในนามของผู้ใช้เมื่อแอปพลิเคชันกำลังใช้งานอยู่ การอนุญาตนี้ทำให้โทเค็นการเข้าถึงที่ส่งคืนโดยจุดสิ้นสุด OAuth ของเรามีอายุการใช้งานยาวนาน

ขอค่าสิทธิ์

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

UPDATE

การอนุญาต offline_access ได้ถูกลบออกไปเมื่อไม่นานมานี้

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


2
เพื่อตอบสนองต่อสิ่งนี้ฉันจึงเริ่มไลบรารีโอเพนซอร์สที่อาจมีประโยชน์สำหรับพวกคุณ เป็น oAuth lib ที่มีจุดมุ่งหมายเพื่อรองรับเครือข่ายโซเชียลทั้งหมดที่มีการใช้งาน oAuth รองรับการอนุญาตเพิ่มเติมแล้วรวมถึงการโพสต์ออฟไลน์ code.google.com/p/socialoauth
Tendrid

แม้โทเค็น Offline_access จะหมดอายุหากผู้ใช้เปลี่ยนรหัสผ่านบน Facebook
Bemmu

น่าเสียดายที่ไม่ใช่วิธีการแก้ปัญหาที่ "สะอาด" ขั้นแรกหรือทั้งหมดที่ขออนุญาตนี้จะแจ้งเตือนผู้ใช้ถึงการอนุญาตเพิ่มเติม (เช่นแอปพลิเคชันนี้จะสามารถเข้าถึงบัญชี facebook ของคุณได้ตลอดเวลา) ซึ่งจะทำให้ผู้มีโอกาสเป็นลูกค้าจำนวนมากปิด ประการที่สองหากการใช้งานเปลี่ยนรหัสผ่านโทเค็นนี้จะไม่ถูกต้อง ดังนั้นจึงจำเป็นต้องมีวิธีที่ดีกว่านี้ (เช่นการรีเฟรชโทเค็น) เพื่อรับ access_token ใหม่โดยเฉพาะอย่างยิ่งสำหรับแอปพลิเคชันเว็บที่ขับเคลื่อนด้วย ajax ไคลเอนต์ที่หลากหลาย
Vladimir

24
ตามเอกสาร apiของพวกเขาoffline_access จะไม่ได้รับการสนับสนุนอีกต่อไป ณ วันที่ 2 พฤษภาคม 2555
Ben Lesh

@Tendrid ห้องสมุดของคุณรองรับเฉพาะ Facebook และ Twitter
mareoraft

30

ลองใช้วิธีนี้อาจช่วยได้เต็มที่สำหรับคุณ

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/

ในการรับโทเค็นการเข้าถึงตลอดชีพคุณต้องใช้ scope=offline_access

ความหมายscope=offline_accessคือ: -

ช่วยให้แอปพลิเคชันของคุณดำเนินการตามคำขอที่ได้รับอนุญาตในนามของผู้ใช้ได้ตลอดเวลา โดยค่าเริ่มต้นโทเค็นการเข้าถึงส่วนใหญ่จะหมดอายุหลังจากช่วงเวลาสั้น ๆ เพื่อให้แน่ใจว่าแอปพลิเคชันจะส่งคำขอในนามของผู้ใช้เมื่อแอปพลิเคชันกำลังใช้งานอยู่ การอนุญาตนี้ทำให้โทเค็นการเข้าถึงที่ส่งคืนโดยจุดสิ้นสุด OAuth ของเรามีอายุการใช้งานยาวนาน

แต่ตามการอัปเกรดของ Facebook ในอนาคตฟังก์ชัน Offline_acees จะเลิกใช้งานตลอดไปตั้งแต่วันที่ 3 ตุลาคม 2555 เป็นต้นไปและผู้ใช้จะได้รับโทเค็นการเข้าถึงที่มีอายุการใช้งานยาวนาน 60 วันและก่อนที่โทเค็นการเข้าถึงจะหมดอายุ Facebook จะแจ้งเตือนหรือคุณสามารถกำหนดเองได้ ฟังก์ชั่นการแจ้งเตือนดึงค่าการหมดอายุจาก Facebook Api ..


10
ฉันต้องการแจ้งให้คุณทราบว่า fb มีการเปลี่ยนแปลงใน api ของเขาและตอนนี้ไม่มีโทเค็นอายุการใช้งานขณะนี้การเข้าถึงแบบออฟไลน์จะใช้งานได้ 60 วัน
PrateekSaluja

21

โปรดทราบว่าขณะนี้ Facebook เลิกใช้งานสิทธิ์ offline_access เพื่อสนับสนุนโทเค็นซึ่งคุณสามารถขอ "อัปเกรด" ถึงวันหมดอายุได้ ตอนนี้ฉันกำลังจัดการกับเรื่องนี้ด้วยตัวเองดังนั้นฉันจึงไม่มีอะไรจะพูดอีกมาก แต่เอกสารนี้อาจช่วยได้:

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


17

ฉันมาที่นี่ด้วยคำถามเดียวกับ OP แต่คำตอบที่แนะนำการใช้ offline_access ทำให้ฉันติดธงแดง

การรักษาความปลอดภัยการเข้าถึงบัญชี Facebook ของผู้ใช้แบบออฟไลน์นั้นมีความแตกต่างในเชิงคุณภาพและมีประสิทธิภาพมากกว่าการใช้ Facebook สำหรับการลงชื่อเพียงครั้งเดียวและไม่ควรใช้เพียงเล็กน้อย (เว้นแต่คุณจะต้องการจริงๆ) เมื่อผู้ใช้ให้สิทธิ์นี้ "แอปพลิเคชัน" จะตรวจสอบบัญชีของผู้ใช้ได้จากทุกที่ทุกเวลา ฉันใส่ "แอปพลิเคชัน" ไว้ในเครื่องหมายคำพูดเพราะเป็นเครื่องมือใด ๆ ที่มีข้อมูลรับรองคุณสามารถเขียนสคริปต์ชุดเครื่องมือทั้งหมดที่ไม่มีส่วนเกี่ยวข้องกับเว็บเซิร์ฟเวอร์ที่สามารถเข้าถึงข้อมูลใด ๆ ที่ผู้ใช้ตกลงที่จะแบ่งปันให้กับผู้ใช้ หนังสือรับรอง

ฉันจะไม่ใช้คุณสมบัตินี้เพื่อหลีกเลี่ยงอายุการใช้งานโทเค็นสั้น ๆ นั่นไม่ใช่จุดประสงค์ที่ตั้งใจไว้ แท้จริงแล้วอายุการใช้งานโทเค็นนั้นเป็นคุณลักษณะด้านความปลอดภัย ฉันยังคงมองหารายละเอียดเกี่ยวกับการใช้โทเค็นเหล่านี้อย่างเหมาะสม (ฉันจะคงอยู่ได้หรือไม่ฉันจะรักษาความปลอดภัยได้อย่างไร / ฉันจะรักษาความปลอดภัยได้อย่างไร Facebook ฝัง "โทเค็นการรีเฟรช" OAuth 2.0 ไว้ในตัวหลักหรือไม่หากไม่เป็นเช่นนั้นอยู่ที่ไหนและ / หรือฉันจะรีเฟรชได้อย่างไร) แต่ฉันค่อนข้างแน่ใจว่า offline_access ไม่ใช่วิธีที่ถูกต้อง


1
สงสัยเหมือนกันที่นี่ david คุณพบข้อมูลเพิ่มเติมเกี่ยวกับวิธีการรักษาความปลอดภัยโทเค็นที่จัดเก็บไว้สำหรับการเข้าถึงแบบออฟไลน์หรือไม่?
neal aise

เอกสารของ Facebook แย่มาก แต่ฉันคิดว่าสถานการณ์ก็คือปลอดภัยพอสมควรที่จะยังคงมีโทเค็นการเข้าถึงที่ไม่ได้รับด้วย offline_access แม้ว่าจะเป็นความจริงที่ว่าใครก็ตามที่สามารถเข้าถึงได้ (ในขณะที่ผู้ใช้ FB ยังคงล็อกอินอยู่) อาจทำอะไรก็ได้ที่ผู้ใช้ให้สิทธิ์คุณ แต่ก็ไม่ได้เลวร้ายนักเนื่องจากโทเค็นจะไม่ถูกต้องทันทีที่ผู้ใช้ออกจากระบบ facebook ทุกแห่ง มันยังคงเป็นช่องโหว่ด้านความปลอดภัย (ฉันคิดว่ามันแปลกที่คุณไม่จำเป็นต้องระบุความลับของแอพในคำขอ / ฉัน) แต่มันไม่ได้เปิด ถ้าใครรู้สึกดีกว่านี้อย่าลังเลที่จะแก้ไขฉัน
David Pope

8

ใช่พวกเขาหมดอายุ มีค่า "หมดอายุ" ที่ส่งผ่านไปพร้อมกับ "access_token" และจากสิ่งที่ฉันบอกได้คือประมาณ 2 ชั่วโมง ฉันค้นหาแล้ว แต่ไม่เห็นวิธีขอเวลาหมดอายุที่นานขึ้น


3
หากคุณขอสิทธิ์ "offline_access" โทเค็นจะไม่หมดอายุ
Brendan Berg

1
@Brendan: แต่มันจะถูกยกเลิกทันทีที่ผู้ใช้เปลี่ยนรหัสผ่าน Facebook ของเขา / เธอ
Hoàng Long

@ Hoàngลองอ้างอิงถึงสิ่งนี้หรือไม่?
Charles Prakash Dasari

6

เนื่องจากฉันมีปัญหาเดียวกัน - ดูโพสต์ที่ยอดเยี่ยมในหัวข้อนี้จาก ben biddington ซึ่งชี้แจงปัญหาทั้งหมดนี้ด้วยโทเค็นที่ไม่ถูกต้องและประเภทที่ถูกต้องในการส่งคำขอ

http://benbiddington.wordpress.com/2010/04/23/facebook-graph-api-getting-access-tokens/


4

คุณสามารถรีเฟรชโทเค็นการเข้าถึงของผู้ใช้ได้ทุกครั้งที่ผู้ใช้ล็อกอินเข้าสู่ไซต์ของคุณผ่าน facebook การเข้าถึงแบบออฟไลน์ไม่สามารถรับประกันได้ว่าคุณจะได้รับโทเค็นการเข้าถึงตลอดชีวิตโทเค็นการเข้าถึงจะเปลี่ยนแปลงทุกครั้งที่ผู้ใช้เพิกถอนการเข้าถึงแอปพลิเคชันของคุณหรือผู้ใช้เปลี่ยนรหัสผ่านของตน

อ้างจาก facebook http://developers.facebook.com/docs/authentication/

หมายเหตุ: หากแอปพลิเคชันไม่ได้ขอสิทธิ์ offline_access โทเค็นการเข้าถึงจะถูก จำกัด เวลา โทเค็นการเข้าถึงแบบ จำกัด เวลาจะถูกยกเลิกเมื่อผู้ใช้ออกจากระบบ Facebook หากแอปพลิเคชันได้รับสิทธิ์ offline_access จากผู้ใช้โทเค็นการเข้าถึงจะไม่มีวันหมดอายุ อย่างไรก็ตามจะไม่ถูกต้องทุกครั้งที่ผู้ใช้เปลี่ยนรหัสผ่าน

สมมติว่าคุณจัดเก็บ uid facebook ของผู้ใช้และโทเค็นการเข้าถึงไว้ในตารางผู้ใช้ในฐานข้อมูลของคุณทุกครั้งที่ผู้ใช้คลิกปุ่ม "เข้าสู่ระบบด้วย facebook" คุณจะตรวจสอบสถานะการเข้าสู่ระบบโดยใช้ facebook Javascript API จากนั้นตรวจสอบสถานะการเชื่อมต่อจากการตอบกลับ หากผู้ใช้เชื่อมต่อกับไซต์ของคุณคุณสามารถอัปเดตโทเค็นการเข้าถึงในตารางได้


3

กดปุ่มนี้เพื่อแลกเปลี่ยนโทเค็นการเข้าถึงชีวิตระยะสั้นสำหรับการใช้ชีวิตระยะยาว / ไม่หมดอายุ (หน้า) หนึ่ง:

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

ลงชื่อเข้าใช้บัญชี facebook และแก้ไขการตั้งค่าแอปพลิเคชันของคุณ (บัญชี -> การตั้งค่าแอปพลิเคชัน -> การอนุญาตเพิ่มเติมของแอปพลิเคชันที่ใช้บัญชีของคุณ) ยกเลิกการเลือกสิทธิ์ (เข้าถึงข้อมูลของฉันเมื่อฉันไม่ได้ใช้แอปพลิเคชัน (offline_access)) จากนั้นใบหน้าจะออกโทเค็นใหม่เมื่อคุณลงชื่อเข้าใช้แอปพลิเคชัน


1

พื้นฐานโทเค็น facebook จะหมดอายุภายในหนึ่งชั่วโมง แต่คุณสามารถใช้โทเค็น 'แลกเปลี่ยน' เพื่อรับโทเค็นที่มีอายุการใช้งานยาวนาน https://developers.facebook.com/docs/facebook-login/access-tokens

GET /oauth/access_token?  
    grant_type=fb_exchange_token&           
    client_id={app-id}&
    client_secret={app-secret}&
    fb_exchange_token={short-lived-token} 

1

ไม่กี่ปีต่อมา แต่ Facebook Graph API Explorer มีสัญลักษณ์ข้อมูลเล็กน้อยถัดจากโทเค็นการเข้าถึงที่อนุญาตให้คุณเข้าถึงแอปเครื่องมือโทเค็นการเข้าถึงและขยายโทเค็น API เป็นเวลาสองถึงสามเดือน อาจเป็นประโยชน์ในระหว่างการพัฒนา

ใส่คำอธิบายภาพที่นี่


0

ตรวจสอบสิ่งต่อไปนี้เมื่อคุณโต้ตอบกับ API กราฟ facebook

1) URL การเชื่อมต่อแอปพลิเคชันควรเป็นฐานของ URL การเชื่อมต่อ "redirect_uri" ของคุณ: - www.x-minds.org/fb/connect/ redirect_uri - www.x-minds.org/fb/connect/redirect 2) "redirect_uri ของคุณ "ควรจะเหมือนกันในทั้งสองกรณี (เมื่อคุณขอรหัสยืนยันและขอ access_token) redirect_uri - www.x-minds.org/fb/connect/redirect 3) คุณควรเข้ารหัสอาร์กิวเมนต์เมื่อคุณขอ access_token 4) ไม่ควรส่งผ่านอาร์กิวเมนต์ (type = client_cred) เมื่อคุณร้องขอ access_token เซิร์ฟเวอร์การอนุญาตจะออกโทเค็นโดยไม่มีส่วนของเซสชัน เราไม่สามารถใช้โทเค็นนี้กับนามแฝง "ฉัน" ในกราฟ API โทเค็นนี้จะมีความยาว (40) แต่โทเค็นที่มีส่วนของเซสชันจะมีความยาว (81) โทเค็นการเข้าถึงที่ไม่มีส่วนของเซสชันจะใช้ได้กับบางกรณี

เช่น - https://graph.facebook.com/ ? access_token = 116122545078207 | EyWJJYqrdgQgV1bfueck320z7MM แต่ Graph API ที่มีนามแฝง "me" จะใช้ได้กับโทเค็นที่มีส่วนของเซสชันเท่านั้น


0

ฉันไม่รู้ว่าโทเค็นจะหมดอายุเมื่อไหร่ แต่เป็นเช่นนั้นมิฉะนั้นจะไม่มีตัวเลือกในการให้สิทธิ์แบบออฟไลน์

อย่างไรก็ตามบางครั้งการกำหนดให้ผู้ใช้ต้องให้สิทธิ์ออฟไลน์ถือเป็นการใช้งานมากเกินไป ขึ้นอยู่กับความต้องการของคุณอาจเพียงพอที่โทเค็นจะยังคงใช้ได้ตราบเท่าที่เปิดเว็บไซต์ในเบราว์เซอร์ของผู้ใช้ สำหรับสิ่งนี้อาจมีวิธีแก้ปัญหาที่ง่ายกว่า - ล็อกอินผู้ใช้ใหม่เป็นระยะโดยใช้ iframe: facebook อัตโนมัติเข้าสู่ระบบใหม่จากคุกกี้ php

ทำงานให้ฉัน ...

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.