Facebook erişim belirteci nasıl doğrulanır?


108

Sunucunun yapması gereken tek şey var; sadece herhangi bir erişim belirtecinin geçerliliğini kontrol edin.

İstemciler sunucuya kullanıcı kimliği ve tarafından alınan erişim belirtecini gönderir FB.getLoginStatus. Beklediğim gibi, erişim belirtecinin geçerliliğini kontrol eden herhangi bir URL olacaktır http://xxx.facebook.com/access_token?=xxxxxxxxxxxxxxxxxxxxxxxxxxxx.

Bu, kullanılabilir olup olmadığını döndürür veya bunun için herhangi bir API (sunucu tarafı) var mı?


2
Neden sadece graph.facebook.com/me/permissions aramıyorsun?
Igy



3
Güzel bir kullanıcı arayüzü geliştiricileri
var.facebook.com/tools/debug/accesstoken

Yanıtlar:


136

Bunun için resmi olarak desteklenen yöntem şudur:

GET graph.facebook.com/debug_token?
     input_token={token-to-inspect}
     &access_token={app-token-or-admin-token}

Daha fazla bilgi için check token belgelerine bakın .

Örnek bir yanıt:

{
    "data": {
        "app_id": 138483919580948, 
        "application": "Social Cafe", 
        "expires_at": 1352419328, 
        "is_valid": true, 
        "issued_at": 1347235328, 
        "metadata": {
            "sso": "iphone-safari"
        }, 
        "scopes": [
            "email", 
            "publish_actions"
        ], 
        "user_id": 1207059
    }
}

24
Facebook'un büyük olasılıkla büyük değişiklikler getireceğini söylemek yanıltıcı olur. Herhangi bir yerde ve resmi belgelerinin erişim belirtecini doğrulamanın yolu olduğunu açıkça belirtmiyorlar
Ed Sykes

1
@rynop, API uç noktasının adı "debug_token" dir ve Facebook API belgesinin Tokenler ve Hata Ayıklama Hakkında Bilgi Almak adlı bir bölümünde açıklanmıştır . Belgelerin bu bölümüne HTML çapa #debug tarafından atıfta bulunulur ve API'nin hata ayıklama araçlarının arka ucu olduğu belirtilir. Bana oldukça açık görünüyor, ama haklısın, teknik olarak, hiçbir yerde açıkça ve doğrudan fonksiyonun üretim kullanımı için tasarlanmadığını belirtmiyor ... :-)
Jonathan Gilbert

5
Buradaki ana sorun, eğer veriler istemci tarafından geliyorsa, me? Access_token yöntemini kullanmanın tamamen yanlış olmasıdır; Herhangi bir site jeton arayabileceğinden, bunları api'nize erişerek sitenizde kimlik doğrulaması yapmak için kullanabilirsiniz.
srcspider

4
OP, jetonla ilişkili kullanıcı kimliğini kontrol etmek istedi. / Me uç noktası, kullanıcı kimliğini döndürür, ancak yalnızca erişim belirteci geçerliyse (çünkü, sonuçta belirteç hangi "ben" in döndürüleceğini belirlemek için kullanılır ). Yani, grab / me ve kullanıcı kimliklerini karşılaştırın. Her uygulamanın kendi özel kapsamlı kullanıcı kimliklerine sahip olduğu unutulmamalıdır, bu nedenle farklı bir kaynaktan gelen kimlikleri kendi uygulamanızın simgesiyle aldığınız / me ile karşılaştıramazsınız.
Jonathan Gilbert

3
Dokümanlar geçmişte bunu hata ayıklama için kullanan referanslara sahip olabilir. Ancak şu anda bunun tam olarak kullanım durumu olduğunu öne sürüyor.
AndHeiberg

78

Bir hata alırsanız, https://graph.facebook.com/me?access_token=xxxxxxxxxxxxxxxxx talep edebilirsiniz , jeton geçersizdir. İd özelliğine sahip bir JSON nesnesi alırsanız, bu geçerli olur.

Maalesef bu, uygulamanızdan gelip gelmediğini değil, yalnızca simgenizin geçerli olup olmadığını size söyleyecektir.


9
Üzgünüm, sorum net değildi. Sorun, kullanıcının yalnızca uid ve accessToken ile nasıl doğrulanacağıdır. graph.facebook.com/100000726976284?access_token=xxxxxx Örneğin, 100000726976284 kullanıcısının erişim belirtecinin xxxxxx olup olmadığını kontrol etmenin basit bir yolu var mı? Sanırım dosyalanan 'doğrulanmış' anahtar anahtar. Yalnızca doğru xxxxxx'i koyduğumda, yanıtta doğrulanmış = doğru olduğunu görebiliyordum.
So Jae Kyung

14
Graph.facebook.com/me?access_token=xxxxxxxxxxxxxxxxx'i yukarıda belirtildiği gibi isteyin ve ardından sahip olduğunuz kullanıcı kimliğinin istekten geri gönderilen kimlik ile eşleşip eşleşmediğini kontrol edin.
AlexQueue

51
Bu, access_token'ın uygulamanız için olup olmadığını kontrol etmez.
Ed Sykes

Ayrıca expires_atbilgi sağlamıyor.
vinesh

4
aşağı oylama, @EdSykes ile aynı fikirde olun, bu şekilde erişim belirtecinin uygulama geliştiricilerinize
edemezsiniz. facebook.com/docs/facebook-login/security

36

Bugüne kadar ilk olarak bir uygulama erişim belirteci aldığımı (Facebook'a GET isteği aracılığıyla) ve ardından alınan jetonu şu şekilde kullandığımı bilmenizi isterim app-token-or-admin-token:

GET graph.facebook.com/debug_token?
    input_token={token-to-inspect}
    &access_token={app-token-or-admin-token}

Bununla birlikte, bunu yapmanın daha iyi bir yolunu yeni fark ettim (ek olarak bir GET isteğinin daha az olmasını gerektirerek):

GET graph.facebook.com/debug_token?
    input_token={token-to-inspect}
    &access_token={app_id}|{app_secret}

Facebook'un Erişim Belirteçleri için buradaki belgelerinde açıklandığı gibi .


6
Teşekkür ederim. Başkaları için not: "|" yanıtta bağlantı verilen sayfada gösterildiği gibi karakter eklenmelidir ('veya' göstermez): developers.facebook.com/docs/facebook-login/…
Mike S

1
Bu güvensiz değil mi? Uygulama sırrını URL sorgu parametreleri aracılığıyla göndermek, onu sunucunuz ile Facebook arasında "ortada" kalan herkese ifşa eder ve URL'ler şifrelenmediği için HTTPS yardımcı olmaz. Herkes debug_token biçiminde URL'lerle istekleri "dinleyebilir" (koklayabilir) ve Facebook uygulama sırlarını çalabilir.
Simeon


@Xeing teşekkürler, sanırım yanlış bir izlenim altındayım :) Görünüşe göre URL’nin sadece ana bilgisayar kısmı şifrelenmemiş.
Simeon

1
'|' Ekleniyor uygulama sırrı ile nihayet devam etmemi sağladı. Aksi takdirde bu API çalışmaz.
Uday

4

Basitçe isteyin (HTTP GET):

https://graph.facebook.com/USER_ID/access_token=xxxxxxxxxxxxxxxxx

Bu kadar.



1

Değişim Access TokeniçinMobile Number and Country Code(Sunucu Tarafı VEYA İstemci Tarafı)

Bu https://graph.accountkit.com/v1.1/me/?access_token=xxxxxxxxxxxx ile mobile numberbirlikte alabilirsiniz . Eğer bir kez Belki, ve şunları yapmanız onunla çalışabilir doğrulamak parmağınızı ile kullanıcıyı . access_tokenAPI mobile numberidserver & database

xxxxxxxxxx yukarıdaki Access Token

Örnek Yanıt:

{
   "id": "61940819992708",
   "phone": {
      "number": "+91XX82923912",
      "country_prefix": "91",
      "national_number": "XX82923912"
   }
}


(Sunucu Tarafı) Auth Codeiçin ExchangeAccess Token

Auth CodeBunun yerine bir hesabınız varsa, öncelikle Access Tokenbununla alabilirsiniz API- https://graph.accountkit.com/v1.1/access_token?grant_type=authorization_code&code=xxxxxxxxxx&access_token=AA|yyyyyyyyyy|zzzzzzzzzzz

xxxxxxxxxx, yyyyyyyyyyVe zzzzzzzzzzüzerinde olan Auth Code, App IDve App Secretsırasıyla.

Örnek Yanıt

{
   "id": "619XX819992708",
   "access_token": "EMAWdcsi711meGS2qQpNk4XBTwUBIDtqYAKoZBbBZAEZCZAXyWVbqvKUyKgDZBniZBFwKVyoVGHXnquCcikBqc9ROF2qAxLRrqBYAvXknwND3dhHU0iLZCRwBNHNlyQZD",
   "token_refresh_interval_sec": XX92000
}

Not - Bu tercih edilmektedir server-sideçünkü APIgerektirirAPP Secret olması amacıyla değil olduğu sharediçin security reasons.

İyi şanslar.

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.