Facebook OAuth2'deki erişim belirtecinin uzunluğu nedir?


100

Soruma bir cevap bulmak için Google ve StackOverflow'da arama yaptım ama bulamıyorum.

Access_token'ı çevrimdışı erişim için veritabanıma depolamak istiyorum ve sütunumun doğru uzunluğunu belirttiğimden emin olmak istiyorum.

Sadece bir sayı mı yoksa sayı ile dizelerin karışımı mı olduğunu bulamıyorum.

Yanıtlar:


128

Facebook'ta çalışıyorum ve bu konuda kesin bir cevap verebilirim.

Lütfen erişim belirteci için depolama alanına maksimum boyut koymayın. Verileri ekleyip çıkardıkça ve kodlanma şekillerini değiştirdikçe zaman içinde hem büyüyecek hem de küçülecektir.

255 karakter olması konusunda tek bir yerde rehberlik ettik. Bu bilgileri içeren blog yayınını güncelledim ve yeni erişim belirteci belgelerimizi boyutlarla ilgili bir not içerecek şekilde güncelledim:

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

Karışıklık için özür dilerim.


84
Facebook'un kesin cevabının daha sonra değiştireceğimiz olması uygun.
Dave Cohen

6
En azından bu şekilde değişikliği bekleyebilirim, bu yüzden hazırlıksız kalmayacağım.
ZeeCoder

Şu anda 300 baytlık bir varchar2 içinde sakladığımız ve bugün 301-305 bayt jetonlarla sorun yaşamaya başladığımız için hiçbir sınırın olmaması bir tür acı. Onun yerine pelerin kullanmamızı mı öneriyorsun? Yoksa kullanabileceğimiz makul büyüklükte bir boyut var mı?
Trampas Kirk

Bu yanıtı, bir dahaki sefere birisi bana "bu alan için hangi maksimum boyut ayarlamalıyız" => "Herhangi bir maksimum boyut ayarlamayın, yine de büyüyecek" sorduğunda kesinlikle saklayacağım. Gerçekten, onu seviyorum !! Facebook günümü
yarattın

7
MySQL bunun için bir üst sınır gerektirir. Lütfen gerçekçi bir üst sınır verin. örneğin 1000 karakter, 10.000 karakter, 1.000.000.000 karakter? Üst sınırın olmaması sadece mantıksızdır.
Yahya Uddin

70

Facebook'un son zamanlarda şifrelenmiş erişim belirteçlerine geçişiyle, erişim belirtecinin uzunluğu 255 karaktere kadar olabilir. Erişim belirtecini veritabanınızda depoluyorsanız, sütun en az varchar (255) barındırabilmelidir. İşte 4 Ekim 2011 tarihli Facebook'un Geliştirici blogundan bir alıntı:

"Şifreli Erişim Jetonu taşıma etkinleştirildiğinde, erişim jetonunun biçimi değişti. Yeni erişim jetonu biçimi tamamen opaktır ve kodunuzdaki biçime herhangi bir bağımlılık yapmamalısınız. Bir varchar (255) alanı yeterli olacaktır. yeni jetonları saklayın. "

Tam blog yayını burada: https://developers.facebook.com/blog/post/572


2
Güncellenen bilgiler için +1. Bu gerçekten şimdi kabul edilen cevap olmalı.
David Boike

14
Görünüşe göre artık geçerli değil. Yakın zamanda 256 karakter uzunluğunda bir erişim belirteci aldım.
o_o

2
Yukarıdaki @o_o ile aynı. Günümüzde birkaç 255+ dahil olmak üzere 240+ karakter uzunluğunda jeton alıyoruz.
Eric Redon

Bu garip. 8000'lik bir örnekten en uzun olanı 126 karakterdir.
Johnny Oshika

1
Yakın zamanda 344 karakter erişim jetonunu gördük.
o_o

28

Bu cevap artık doğru değil ve FB'nin belgelerinde düzeltilmiş bir değer bulamıyorum. 255 karakterden uzun erişim jetonları alıyoruz. Bunun yerine geleceğe yönelik şeyleri denemek için VARCHAR'dan SMALLTEXT'e geçiyoruz.


Evet, üretim uygulamasında 284 karakter aldım, bu yüzden sütunun varchar (255) olması nedeniyle veritabanı hatası aldım ...
Yuki Matsukura

aynı. 257 aldım
Louis Tsai

1
SMALLTEXTveya MEDIUMTEXT? Ayrıca daha önce access_token'ımı kısıtlamıştım VARCHAR(255)ve bugün bunun sonuçlarını ele alıyorum.
NobleUplift

9

Bölüm 1.4'tenThe OAuth 2.0 Authorization Protocol ( draft-ietf-oauth-v2-22 )

Erişim belirteçleri, kaynak sunucusu güvenlik gereksinimlerine bağlı olarak farklı biçimlere, yapılara ve kullanım yöntemlerine (örneğin, kriptografik özellikler) sahip olabilir. Erişim belirteci öznitelikleri ve korumalı kaynaklara erişmek için kullanılan yöntemler, bu belirtimin kapsamı dışındadır ve tamamlayıcı belirtimlerle tanımlanır.

"Tamamlayıcı spesifikasyonları" aradım, ancak alakalı hiçbir şey bulamadım ve 11.2.2 bölümünde belirtiyor

o Parametre adı: access_token
o Parametre kullanım konumu: yetkilendirme yanıtı, belirteç yanıtı
o Denetleyiciyi değiştir: IETF
o Spesifikasyon belgeleri: [[bu belge]]

Bu, access_token parametresinin bu spesifikasyon içinde tanımlandığını gösterir. Sanırım parametre şu ki, gerçek erişim belirteci tam olarak açıklanmadı.

Güncelleme: Spesifikasyonun bu yazısının en son sürümü ( draft-ietf-oauth-v2-31 ), access_token parametresinden ne bekleneceğini daha iyi tanımlayan bir ek içerir

A.12. "access_token" Sözdizimi

The "access_token" element is defined in Section 4.2.2 and
Section 5.1:

  access-token = 1*VSCHAR

Yani esasen bunun anlamı, erişim belirtecinin en az 1 karakter uzunluğunda olması gerektiğidir, ancak bu belirtimde ne kadar süre tanımlandığına dair bir sınır yoktur.

VSCHAR =% x20-7E'yi tanımladıklarını unutmayın


5

Facebook erişim belirteci 255 karakterden uzun olabilir. ActiveRecord::StatementInvalid: PG::StringDataRightTruncation: ERROR: value too long for type character varying(255)Değerin facebook erişim belirteci olduğu yer gibi birçok hata yaptım . stringUzunluğu sınırlı olduğu için tür sütununu kullanmayın . textBelirteçleri depolamak için tür sütununu kullanabilirsiniz .


3

Son zamanlarda, uygulamamız onları 100 karakterden uzun süredir görüyor. Hâlâ dokümantasyon arıyorum, böylece onlar için 'güvenli' bir alan boyutu belirleyebilirim.


8
Bahsettiğiniz bu "belge" nedir? : D
Mark

2

Cevabı harcanan zamandan güncelleyeceğim.

OAuth2 belgelerinden,

Erişim belirteci dizesi boyutu, bu belirtim tarafından tanımsız bırakılmıştır. Müşteri, değer büyüklükleri hakkında varsayımlarda bulunmaktan kaçınmalıdır. Yetkilendirme sunucusu, verdiği herhangi bir değerin boyutunu belgelemelidir.

( Bu belgenin 4.2.2 Bölümü )

Not: Facebook, bu sayfada belirtildiği gibi OAuth2 kullanıyor .

Şimdi, Facebook geliştiriciler portailinde OAuth belirtecinin uzunluğu hakkında hiçbir bilgi bulunmuyor gibi görünüyor. Yahoo, 400 bit uzunluğunda bir belirteç kullanıyor gibi görünüyor, bu nedenle MySQL'deki bir TEXT sütununun bir varchar'dan daha güvenli olduğunu varsaymak en iyisidir.

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.