Độ dài của access_token trong Facebook OAuth2 là bao nhiêu?


100

Tôi đã tìm kiếm trên Google và StackOverflow để tìm câu trả lời cho câu hỏi của mình nhưng tôi không thể tìm thấy câu trả lời nào.

Tôi muốn lưu trữ access_token vào cơ sở dữ liệu của mình để truy cập ngoại tuyến và tôi muốn chắc chắn chỉ định độ dài chính xác của cột của mình.

Tôi thậm chí không thể tìm thấy nó chỉ là một số hay sự kết hợp giữa số và chuỗi.

Câu trả lời:


128

Tôi làm việc tại Facebook và tôi có thể đưa ra câu trả lời dứt khoát về điều này.

Vui lòng không đặt kích thước tối đa trên bộ nhớ cho mã thông báo truy cập. Chúng tôi hy vọng rằng chúng sẽ phát triển và thu nhỏ theo thời gian khi chúng tôi thêm và xóa dữ liệu cũng như thay đổi cách chúng được mã hóa.

Chúng tôi đã đưa ra hướng dẫn ở một nơi về việc nó có 255 ký tự. Tôi đã cập nhật bài đăng trên blog có thông tin đó và cập nhật tài liệu mã thông báo truy cập mới của chúng tôi để bao gồm ghi chú về kích thước:

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

Xin lỗi vì sự nhầm lẫn.


84
Thật phù hợp khi câu trả lời dứt khoát từ Facebook là chúng tôi sẽ thay đổi nó sau.
Dave Cohen

6
Ít nhất bằng cách này, tôi có thể mong đợi sự thay đổi, vì vậy tôi sẽ không bị thiếu chuẩn bị.
ZeeCoder

Không có giới hạn nào là một điều khó khăn vì chúng tôi hiện đang lưu trữ nó trong một varchar2 300 byte và bắt đầu gặp sự cố hôm nay với các mã thông báo 301-305 byte. Bạn có đề nghị chúng tôi sử dụng một chiếc áo choàng thay thế? Hoặc có một số kích thước hợp lý lớn mà chúng tôi có thể sử dụng?
Trampas Kirk

Tôi chắc chắn giữ câu trả lời đó cho lần sau khi ai đó hỏi tôi "chúng ta nên đặt kích thước tối đa nào cho trường này" => "Đừng đặt bất kỳ kích thước tối đa nào, dù sao nó cũng sẽ phát triển". Thực sự, tôi yêu nó !! Facebook bạn đã tạo nên ngày của tôi;)
Christophe Fondacci

7
MySQL yêu cầu giới hạn trên về điều này. Vui lòng đưa ra một hướng trên thực tế. ví dụ: 1000 ký tự, 10.000 ký tự, 1.000.000.000 ký tự? Không có giới hạn trên chỉ là không hợp lý.
Yahya Uddin

70

Với động thái gần đây của Facebook đối với mã thông báo truy cập được mã hóa, độ dài của mã thông báo truy cập có thể lên đến 255 ký tự. Nếu bạn đang lưu trữ mã thông báo truy cập trong cơ sở dữ liệu của mình, cột phải có thể chứa ít nhất varchar (255). Đây là đoạn trích từ blog Nhà phát triển của Facebook từ ngày 4 tháng 10 năm 2011:

"Khi bật tính năng di chuyển Mã truy cập được mã hóa, định dạng của mã thông báo truy cập đã thay đổi. Định dạng mã thông báo truy cập mới hoàn toàn không rõ ràng và bạn không nên sử dụng bất kỳ sự phụ thuộc nào vào định dạng trong mã của mình. Trường varchar (255) sẽ đủ để lưu trữ các mã thông báo mới. "

Bài đăng trên blog đầy đủ tại đây: https://developers.facebook.com/blog/post/572


2
+1 cho thông tin cập nhật. Đây thực sự nên là câu trả lời được chấp nhận ngay bây giờ.
David Boike

14
Có vẻ như không còn giá trị. Gần đây tôi đã nhận được mã thông báo truy cập độ dài 256 ký tự.
o_o 27/12/12

2
Tương tự như @o_o ở trên. Chúng tôi đang ngày càng nhận được nhiều mã thông báo dài hơn 240 ký tự, bao gồm một vài mã thông báo dài hơn 255 ký tự ngày nay.
Eric Redon

Thật là lạ. Trong số 8000 mẫu, mẫu dài nhất mà tôi từng thấy là 126 ký tự.
Johnny Oshika

1
Gần đây, chúng tôi đã thấy 344 mã thông báo truy cập ký tự.
o_o

28

Câu trả lời này không còn đúng nữa và tôi không thể tìm thấy giá trị đã sửa trong tài liệu của FB. Chúng tôi đã nhận được mã thông báo truy cập dài hơn 255 ký tự. Thay vào đó, chúng tôi đang chuyển từ VARCHAR sang SMALLTEXT để thử những thứ có thể kiểm chứng được trong tương lai.


Vâng, tôi có 284 nhân vật trong ứng dụng sản xuất vì vậy tôi đã nhận lỗi cơ sở dữ liệu do các cột là varchar (255) ...
Yuki Matsukura

tương tự. vừa có 257
Louis Tsai

1
SMALLTEXThoặc MEDIUMTEXT? Trước đây tôi cũng đã bị hạn chế access_token VARCHAR(255)và hôm nay tôi đang đối phó với sự cố đó.
NobleUplift

9

Từ phần 1.4 của The OAuth 2.0 Authorization Protocol( thảo-ietf-oauth-v2-22 )

Mã thông báo truy cập có thể có các định dạng, cấu trúc và phương pháp sử dụng khác nhau (ví dụ: thuộc tính mật mã) dựa trên các yêu cầu bảo mật của máy chủ tài nguyên. Các thuộc tính mã thông báo truy cập và các phương pháp được sử dụng để truy cập tài nguyên được bảo vệ nằm ngoài phạm vi của đặc điểm kỹ thuật này và được xác định bởi thông số kỹ thuật đồng hành.

Tôi đã tìm kiếm "thông số kỹ thuật đồng hành" nhưng không tìm thấy bất kỳ điều gì có liên quan và trong phần 11.2.2, nó nêu rõ

o Tên tham số: access_token
o Vị trí sử dụng tham số: phản hồi ủy quyền, phản hồi mã thông báo
o Bộ điều khiển thay đổi: IETF
o (Các) tài liệu đặc tả: [[tài liệu này]]

Điều này dường như chỉ ra rằng tham số access_token được xác định trong thông số kỹ thuật này. Mà tôi đoán là tham số nhưng mã thông báo truy cập thực tế không được bổ sung đầy đủ.

Cập nhật: Phiên bản mới nhất của văn bản đặc tả này ( nháp-ietf-oauth-v2-31 ) bao gồm một phụ lục xác định rõ hơn những gì mong đợi từ tham số access_token

A.12. Cú pháp "access_token"

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

  access-token = 1*VSCHAR

Vì vậy, về cơ bản điều này có nghĩa là access_token phải dài ít nhất 1 ký tự nhưng không có giới hạn về thời lượng được xác định trong đặc tả này.

Lưu ý rằng họ xác định VSCHAR =% x20-7E


5

Mã thông báo truy cập Facebook có thể dài hơn 255 ký tự. Tôi đã gặp rất nhiều lỗi như ActiveRecord::StatementInvalid: PG::StringDataRightTruncation: ERROR: value too long for type character varying(255)nơi giá trị là mã thông báo truy cập facebook. Không sử dụng stringloại cột vì độ dài của nó bị giới hạn. Bạn có thể sử dụng textcột loại để lưu trữ mã thông báo.


3

Gần đây, ứng dụng của chúng tôi đã nhìn thấy chúng dài hơn 100 ký tự. Tôi vẫn đang tìm kiếm tài liệu để có thể tìm ra kích thước trường 'an toàn' cho chúng.


8
Bạn nói về "tài liệu" này là gì? : D
Đánh dấu

2

Tôi sẽ cập nhật câu trả lời từ thời gian dành.

Từ tài liệu OAuth2,

Thông số kỹ thuật này không xác định kích thước chuỗi mã thông báo truy cập. Khách hàng nên tránh đưa ra các giả định về kích thước giá trị. Máy chủ ủy quyền phải ghi lại kích thước của bất kỳ giá trị nào mà nó đưa ra.

(Phần 4.2.2 của tài liệu này )

Lưu ý: Facebook đang sử dụng OAuth2, như đã đề cập trên trang này .

Vì vậy, hiện tại, dường như không có thông tin nào trên cổng thông tin nhà phát triển của Facebook về độ dài của mã thông báo OAuth. Yahoo dường như sử dụng một mã thông báo dài 400 bit, vì vậy tốt nhất nên giả định rằng một cột TEXT trong MySQL an toàn hơn một varchar.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.