access_token ใน Facebook OAuth2 มีความยาวเท่าใด


100

ฉันค้นหาใน Google และ StackOverflow เพื่อหาคำตอบสำหรับคำถามของฉัน แต่ไม่พบ

ฉันต้องการจัดเก็บ access_token ไว้ในฐานข้อมูลของฉันสำหรับการเข้าถึงแบบออฟไลน์และฉันต้องการระบุความยาวของคอลัมน์ที่ถูกต้อง

ฉันหาไม่เจอว่ามันเป็นแค่ตัวเลขหรือส่วนผสมระหว่างตัวเลขกับสตริง

คำตอบ:


128

ฉันทำงานที่ Facebook และสามารถให้คำตอบที่ชัดเจนเกี่ยวกับเรื่องนี้ได้

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

เราได้ให้คำแนะนำในที่เดียวเกี่ยวกับความยาว 255 อักขระ ฉันได้อัปเดตบล็อกโพสต์ที่มีข้อมูลดังกล่าวและอัปเดตเอกสารโทเค็นการเข้าถึงใหม่ของเราเพื่อรวมบันทึกเกี่ยวกับขนาด:

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

ขอโทษสำหรับความสับสน.


84
เป็นเรื่องที่เหมาะสมที่คำตอบที่ชัดเจนจาก Facebook คือเราจะเปลี่ยนแปลงในภายหลัง
Dave Cohen

6
อย่างน้อยด้วยวิธีนี้ฉันสามารถคาดหวังการเปลี่ยนแปลงได้ดังนั้นฉันจะไม่เตรียมตัวให้พร้อม
ZeeCoder

การไม่มีขีด จำกัด เลยถือเป็นความเจ็บปวดเพราะเรากำลังเก็บมันไว้ใน varchar2 ขนาด 300 ไบต์และเริ่มมีปัญหาในวันนี้ด้วยโทเค็น 301-305 ไบต์ คุณแนะนำให้เราใช้ clob แทนหรือไม่? หรือมีขนาดใหญ่พอสมควรที่เราสามารถใช้ได้หรือไม่?
Trampas Kirk

ฉันจะเก็บคำตอบนั้นไว้ในครั้งต่อไปที่มีคนถามว่า "เราควรตั้งค่าขนาดสูงสุดใดสำหรับฟิลด์นี้" => "ไม่ต้องกำหนดขนาดสูงสุดใด ๆ มันก็จะเติบโตต่อไป" โดนใจจริงๆ !! Facebook คุณทำให้วันของฉัน;)
Christophe Fondacci

7
MySQL ต้องการขอบเขตบนของสิ่งนี้ โปรดให้ส่วนบนที่เป็นจริง เช่น 1,000 ตัวอักษร 10,000 ตัว 1,000,000,000 ตัวอักษร? การไม่มีขอบเขตบนนั้นไม่มีเหตุผล
Yahya Uddin

70

ด้วยการย้ายไปยังโทเค็นการเข้าถึงที่เข้ารหัสล่าสุดของ Facebook ความยาวของโทเค็นการเข้าถึงอาจมีได้ถึง 255 อักขระ หากคุณจัดเก็บโทเค็นการเข้าถึงในฐานข้อมูลของคุณคอลัมน์ควรสามารถรองรับ varchar (255) เป็นอย่างน้อย นี่คือข้อความที่ตัดตอนมาจากบล็อกนักพัฒนาของ Facebook ตั้งแต่วันที่ 4 ตุลาคม 2554:

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

โพสต์บล็อกแบบเต็มที่นี่: https://developers.facebook.com/blog/post/572


2
+1 สำหรับข้อมูลที่อัปเดต นี่ควรเป็นคำตอบที่ยอมรับได้ในตอนนี้
David Boike

14
ดูเหมือนจะใช้ไม่ได้อีกต่อไป ฉันเพิ่งได้รับโทเค็นการเข้าถึงความยาว 256 อักขระ
o_o

2
เหมือนกับ @o_o ด้านบน เราได้รับโทเค็นความยาว 240+ ตัวอักษรมากขึ้นเรื่อย ๆ รวมถึงปัจจุบัน 255+ ตัว
Eric Redon

นั่นเป็นเรื่องแปลก จากตัวอย่าง 8000 ตัวที่ยาวที่สุดที่ฉันเคยเห็นคือ 126 ตัวอักษร
Johnny Oshika

1
เมื่อเร็ว ๆ นี้เราได้เห็นโทเค็นการเข้าถึงอักขระ 344 ตัว
o_o

28

คำตอบนี้ไม่ถูกต้องอีกต่อไปและฉันไม่พบค่าที่แก้ไขในเอกสารของ FB เราได้รับโทเค็นการเข้าถึงที่มีความยาวมากกว่า 255 อักขระ เรากำลังย้ายจาก VARCHAR เป็น SMALLTEXT แทนเพื่อพยายามทำสิ่งที่พิสูจน์ได้ในอนาคต


ใช่ฉันมีอักขระ 284 ตัวในแอปที่ใช้งานจริงดังนั้นฉันจึงได้รับข้อผิดพลาดของฐานข้อมูลเนื่องจากคอลัมน์คือ varchar (255) ...
Yuki Matsukura

เหมือนกัน. เพิ่งได้รับ 257
Louis Tsai

1
SMALLTEXTหรือMEDIUMTEXT? ก่อนหน้านี้ฉันยังได้ จำกัด access_token ของฉันไว้VARCHAR(255)และฉันกำลังจัดการกับผลเสียในวันนี้
NobleUplift

9

จากส่วน 1.4 ของThe OAuth 2.0 Authorization Protocol( ร่าง -Ietf-oauth-v2-22 )

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

ฉันมองหา "ข้อมูลจำเพาะของสหาย" แต่ไม่พบสิ่งที่เกี่ยวข้องและในส่วนที่ 11.2.2 ระบุไว้

o ชื่อพารามิเตอร์: access_token
o ตำแหน่งการใช้งานพารามิเตอร์: การตอบสนองการอนุญาต, การตอบสนองโทเค็น
o ตัวควบคุมการเปลี่ยนแปลง: IETF
o เอกสารข้อมูลจำเพาะ: [[เอกสารนี้]]

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

อัปเดต: เวอร์ชันล่าสุดของการเขียนข้อกำหนดนี้ ( แบบร่าง -Ietf-oauth-v2-31 ) มีภาคผนวกที่กำหนดสิ่งที่คาดหวังได้ดีขึ้นจากพารามิเตอร์ access_token

ก. 12. "access_token" ไวยากรณ์

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

  access-token = 1*VSCHAR

โดยพื้นฐานแล้วสิ่งนี้หมายความว่า access_token ควรมีความยาวอย่างน้อย 1 อักขระ แต่ไม่ จำกัด ระยะเวลาที่กำหนดไว้ในข้อกำหนดนี้

สังเกตว่าพวกเขากำหนด VSCHAR =% x20-7E


5

โทเค็นการเข้าถึง Facebook มีความยาวได้มากกว่า 255 อักขระ ฉันมีข้อผิดพลาดมากมายเช่นActiveRecord::StatementInvalid: PG::StringDataRightTruncation: ERROR: value too long for type character varying(255)ค่าคือโทเค็นการเข้าถึง facebook อย่าใช้stringคอลัมน์ประเภทเนื่องจากความยาวมี จำกัด คุณสามารถใช้textคอลัมน์ประเภทเพื่อจัดเก็บโทเค็น


3

เมื่อเร็ว ๆ นี้แอพของเรามีความยาวมากกว่า 100 ตัวอักษร ฉันยังคงมองหาเอกสารเพื่อหาขนาดฟิลด์ที่ "ปลอดภัย" สำหรับพวกเขา


8
"เอกสาร" นี้ที่คุณพูดถึงคืออะไร? : D
มาร์ค

2

ฉันจะอัปเดตคำตอบจากเวลาที่ใช้

จากเอกสาร OAuth2

ขนาดสตริงโทเค็นการเข้าถึงไม่ได้กำหนดโดยข้อกำหนดนี้ ลูกค้าควรหลีกเลี่ยงการตั้งสมมติฐานเกี่ยวกับขนาดมูลค่า เซิร์ฟเวอร์การอนุญาตควรบันทึกขนาดของค่าใด ๆ ที่มีปัญหา

(ส่วน 4.2.2 ของเอกสารนี้ )

หมายเหตุ: Facebook ใช้ OAuth2 ตามที่ระบุไว้ในหน้านี้

ตอนนี้ดูเหมือนว่าไม่มีข้อมูลในพอร์ตเทลของนักพัฒนาของ Facebook เกี่ยวกับความยาวของโทเค็น OAuth Yahoo ดูเหมือนจะใช้โทเค็นที่มีความยาว 400 บิตดังนั้นจึงควรสมมติว่าคอลัมน์ TEXT ใน MySQL ปลอดภัยกว่า varchar

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