Facebook Oauth 2.0 Erişim Belirteçlerinin Süresi Doluyor mu?


124

Facebook'ta Oauth 2.0 yetkilendirmesi ile oynuyorum ve Facebook'un geçtiği erişim belirteçlerinin süresinin dolup dolmadığını merak ediyordum. Öyleyse, uzun ömürlü bir erişim belirteci istemenin bir yolu var mı?


4
Bu soruya bazı ayrıntılar eklemek için: offline_access bile, kullanıcı Facebook şifresini değiştirdiğinde geçersiz hale gelir. Bu nedenle, eskisini kullanırken hata alırsanız, güvenli oynamak ve yeni bir erişim jetonu almak daha iyidir.
Hoàng Long


2
beyler, hepiniz sadece rock yapıyorsunuz. Soru ne olursa olsun,
çözdüm

3
Görünüşe göre Facebook, 1 Mayıs'ta offline_access iznini kullanımdan kaldırıyor. Gelecekte, "sona erme süresi" (60 gün) dolduğunda, kullanıcı şifresini değiştirdiğinde, kullanıcı uygulamanızın yetkisini kaldırdığında veya kullanıcı oturumu kapattığında tüm erişim belirteçlerinin geçerliliği sona erecektir. API . Not: Erişim belirteçlerinin oturum kapatıldığında yine de sona ermesi durumunda Facebook'un yeni "sona erme süresini" neden 60 güne ayarladığından emin değilim (kullanıcılar 60 gün içinde çıkış yapma eğilimindeymiş gibi görünüyor). Belki bir şey kaçırıyorum ... son kullanma tarihi
Steven Wexler

1
Access_token davranışı şimdi değişiyor, Temmuz 2012'deki "Breaking Changes" a bakmalısınız - offline_access izni kullanımdan kaldırılıyor ve access_token uzun bir yaşam döngüsüne sahip olacak.
qodeninja

Yanıtlar:


64

Biraz araştırma yaptıktan sonra bunu buldum. Cevap gibi görünüyor:

Güncelleme (11 / Nisan / 2018)

  • Belirtecin süresi yaklaşık 60 gün sonra dolar.
  • Token, uygulamanızı kullanan kişi Facebook sunucularına talepte bulunduğunda 90 güne kadar günde bir kez yenilenir.
  • Tüm erişim belirteçlerinin, uygulamanızı kullanan kişinin izni ile her 90 günde bir yenilenmesi gerekir.

Facebook değişim duyurusu (10/04/2018)

Facebook güncellenmiş belirteç süre sonu sayfası (10/04/2018)

offline_access: Uygulamanızın herhangi bir zamanda kullanıcı adına yetkili talepler gerçekleştirmesini sağlar. Varsayılan olarak, çoğu erişim belirteci, uygulamaların yalnızca uygulamayı aktif olarak kullanırken kullanıcı adına istekte bulunmasını sağlamak için kısa bir süre sonra sona erer. Bu izin, OAuth uç noktamız tarafından döndürülen erişim jetonunun uzun ömürlü olmasını sağlar.

Bu bir izin değeridir.

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

GÜNCELLEME

offline_access izni bir süre önce kaldırıldı.

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


2
Buna yanıt olarak, sizin işinize yarayabilecek bir açık kaynak kitaplığı başlattım. Tüm sosyal ağları oAuth uygulamalarıyla desteklemeyi amaçlayan bir oAuth kütüphanesidir. Çevrimdışı gönderme dahil genişletilmiş izinleri zaten destekliyor. code.google.com/p/socialoauth
Tendrid

Kullanıcının Facebook'ta şifresini değiştirmesi durumunda offline_access belirteçlerinin bile süresi dolar.
Bemmu

Maalesef, eldeki soruna "temiz" bir çözüm değil. Öncelikle veya tüm bu izni istemek, kullanıcıyı ek izin konusunda uyarır (örneğin, bu uygulama facebook hesabınıza HERHANGİ bir zamanda erişebilir), bu da ÇOK potansiyel müşteriyi kapatır. İkincisi, kullanım şifresini değiştirirse, bu simge geçerli olmayacaktır. Bu nedenle, özellikle zengin istemci ajax tabanlı web uygulamaları için yeni bir erişim belirteci almanın daha iyi bir yolu (örneğin yenileme belirteci) olması gerekir.
Vladimir

24
Onların göre api dokümantasyon offline_access artık 2 Mayıs 2012 itibariyle desteklenecektir
Ben Lesh

@Tendrid Kitaplığınız yalnızca Facebook ve Twitter'ı destekler.
mareoraft

30

Bunu deneyin, sizin için tam yardımcı olabilir

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/

Ömür boyu Erişim Jetonu almak için kullanmanız gerekir scope=offline_access

Anlamı scope=offline_accessşudur: -

Uygulamanızın herhangi bir zamanda kullanıcı adına yetkili talepler gerçekleştirmesini sağlar. Varsayılan olarak, çoğu erişim belirteci, uygulamaların yalnızca uygulamayı aktif olarak kullanırken kullanıcı adına istekte bulunmasını sağlamak için kısa bir süre sonra sona erer. Bu izin, OAuth uç noktamız tarafından döndürülen erişim jetonunun uzun ömürlü olmasını sağlar.

Ancak facebook'un gelecekteki yükseltmesine göre offline_acees işlevi 3 Ekim 2012'den itibaren sonsuza kadar kullanımdan kaldırılacak ve kullanıcıya 60 günlük uzun ömürlü erişim belirteci verilecek ve erişim belirtecinin sona ermesinden önce Facebook bunu bildirecek veya özelliğinizi alabilirsiniz. Facebook API'den sona erme değerini getiren bildirim işlevi ..


10
FB'nin API'sinde değiştiğini ve artık ömür boyu belirteç bulunmadığını size bildirmek isterim, Şimdi çevrimdışı erişim 60 gün boyunca etkin olacak.
PrateekSaluja


17

Buraya OP ile aynı soruyla geldim, ancak offline_access kullanımını öneren cevaplar benim için kırmızı bayrakları yükseltiyor.

Güvenlik açısından, bir kullanıcının Facebook hesabına çevrimdışı erişim elde etmek niteliksel olarak farklıdır ve Facebook'u tek oturum açma için kullanmaktan çok daha güçlüdür ve hafife alınmamalıdır (gerçekten ihtiyacınız olmadıkça). Bir kullanıcı bu izni verdiğinde, "uygulama" kullanıcının hesabını herhangi bir zamanda herhangi bir yerden inceleyebilir. "Uygulamayı" tırnak içine aldım çünkü aslında kimlik bilgilerine sahip herhangi bir araçtır - kullanıcının onlarla paylaşmayı kabul ettiği bilgilere erişebilen, web sunucusuyla hiçbir ilgisi olmayan bütün bir araç setinin komut dosyasını oluşturabilirsiniz. kimlik bilgileri.

Kısa bir belirteç ömrü etrafında çalışmak için bu özelliği kullanmam; amaçlanan amacı bu değil. Aslında, belirteç yaşam süresinin kendisi bir güvenlik özelliğidir. Hala bu belirteçlerin doğru kullanımıyla ilgili ayrıntılar arıyorum (Onları kalıcı hale getirebilir miyim? Bunları nasıl güvenceye almalıyım? Facebook, OAuth 2.0 "yenileme jetonunu" ana simgenin içine yerleştiriyor mu? Değilse, nerede ve / veya nasıl yenileyebilirim?), ancak offline_access'in doğru yol olmadığından oldukça eminim.


1
aynı şüpheler burada david. Çevrimdışı erişim için depolanan jetonların nasıl güvenli hale getirileceği hakkında daha fazla bilgi buldunuz mu?
neal aise

Facebook'un dokümanları korkunç, ancak durumun, offline_access ile elde edilmeyen erişim belirteçlerini sürdürmenin makul derecede güvenli olduğunu düşünüyorum . Buna erişen herhangi birinin (FB kullanıcısı hala oturum açmış durumdayken), kullanıcının size izin verdiği herhangi bir şeyi yapabileceği doğru olsa da, kullanıcı facebook'tan çıktığı anda tokenlar geçersiz kılındığı için o kadar da kötü değil. herhangi bir yer. Hala bir güvenlik açığı (/ me isteklerinde uygulamanızın sırrını sağlamak zorunda olmamanızı garip buluyorum), ancak açık uçlu değil. Biri bunu yaparsa, beni düzeltmekte özgürsün.
David Pope

8

Evet, süreleri doluyor. 'Access_token' ile birlikte geçen bir 'expires' değeri var ve söyleyebileceğim kadarıyla yaklaşık 2 saat. Arıyorum, ancak daha uzun bir son kullanma süresi istemenin bir yolunu göremiyorum.


3
'Offline_access' izni talep ederseniz, jetonun süresi dolmaz.
Brendan Berg

1
@Brendan: Ancak kullanıcı Facebook şifresini değiştirir değiştirmez geçersiz hale gelecektir
Hoàng Long

@ HoàngLong buna herhangi bir referans var mı?
Charles Prakash Dasari


4

Kullanıcı facebook üzerinden sitenize her giriş yaptığında kullanıcının erişim belirtecini her zaman yenileyebilirsiniz. Çevrimdışı erişim, yaşam boyu erişim belirteci almanızı garanti edemez; erişim belirteci, kullanıcı uygulama erişiminizi iptal ettiğinde veya kullanıcı şifresini değiştirdiğinde değişir.

Facebook'tan alıntı http://developers.facebook.com/docs/authentication/

Not: Uygulama çevrimdışı_ erişim izni istememişse, erişim belirteci zaman sınırlıdır. Zamana bağlı erişim belirteci, kullanıcı Facebook'tan çıkış yaptığında da geçersiz hale gelir. Uygulama, kullanıcıdan offline_access izni almışsa, erişim belirtecinin son kullanma tarihi yoktur. Ancak kullanıcı şifresini her değiştirdiğinde geçersiz hale gelir.

Kullanıcının facebook kullanıcı kimliğini ve erişim belirtecini veritabanınızdaki bir kullanıcılar tablosunda sakladığınızı varsayın, kullanıcı "Facebook ile oturum aç" düğmesine her tıkladığında, facebook Javascript API'sini kullanarak oturum açma durumunu kontrol eder ve ardından yanıttan bağlantı durumunu incelersiniz. , kullanıcı sitenize bağlanmışsa, tablodaki erişim jetonunu güncelleyebilirsiniz.


3

Kısa ömürlü erişim jetonunu uzun yaşayan / süresi dolmayan (sayfa) bir jetonla değiştirmek için buna basın:

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 hesabına giriş yapın ve uygulama ayarlarınızı düzenleyin (hesap -> uygulama ayarı -> hesabınızı kullanan uygulamanın ek izni). iznin işaretini kaldırın (Uygulamayı kullanmadığımda verilerime eriş (offline_access)). Ardından yüz, uygulamaya giriş yaptığınızda yeni bir belirteç düzenleyecektir.



0

facebook grafik api ile etkileşim kurduğunuzda aşağıdakileri kontrol edin.

1) Uygulama bağlantı URL'si, "redirect_uri" bağlantı URL'nizin temeli olmalıdır: - www.x-minds.org/fb/connect/ redirect_uri - www.x-minds.org/fb/connect/redirect 2) "redirect_uri" "her iki durumda da aynı olmalıdır (bir doğrulama kodu ve erişim belirteci talep ettiğinizde) redirect_uri - www.x-minds.org/fb/connect/redirect 3) bir talepte bulunduğunuzda argümanı kodlamalısınız. access_token 4) bir access_token talep ettiğinizde bağımsız değişkeni (type = client_cred) geçmemelidir. yetkilendirme sunucusu, oturum bölümü olmayan bir belirteç düzenleyecektir. bu belirteci grafik api'de "ben" takma adıyla kullanamayız. Bu jetonun uzunluğu (40) olacak, ancak oturum bölümü olan bir jetonun uzunluğu (81) olacaktır. Oturum kısmı olmayan bir erişim belirteci bazı durumlarda çalışacaktır

örneğin: - https://graph.facebook.com/ ? access_token = 116122545078207 | EyWJJYqrdgQgV1bfueck320z7MM. Ancak "ben" takma adına sahip Grafik API'si yalnızca oturum bölümü içeren belirteçle çalışacaktır.


0

Jetonların süresinin tam olarak ne zaman sona erdiğini bilmiyorum, ama yaparlar, aksi takdirde çevrimdışı izinler verme seçeneği olmazdı.

Her neyse, bazen kullanıcının çevrimdışı izinler vermesini istemek aşırı bir şeydir. İhtiyaçlarınıza bağlı olarak, web sitesi kullanıcının tarayıcısında açık olduğu sürece jetonun geçerli kalması yeterli olabilir. Bunun için daha basit bir çözüm olabilir - kullanıcıyı periyodik olarak bir iframe kullanarak yeniden günlüğe kaydetme: php tanımlama bilgisinden facebook otomatik yeniden oturum açma

Benim için çalıştı ...


0

Bu birkaç yıl sonra, ancak Facebook Graph API Explorer artık erişim belirtecinin yanında, erişim belirteci aracı uygulamasına erişmenize ve API belirtecini birkaç ay boyunca genişletmenize olanak tanıyan küçük bir bilgi simgesine sahip. Geliştirme sırasında yardımcı olabilir.

görüntü açıklamasını buraya girin

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.