Facebook OAuth2中access_token的长度是多少?


100

我在Google和StackOverflow上进行了搜索,以找到针对我的问题的答案,但找不到。

我想将access_token存储到我的数据库中以进行脱机访问,并且我想确保指定正确的列长度。

我什至找不到它是数字还是数字和字符串之间的混合。

Answers:


128

我在Facebook工作,就此可以给出明确的答案。

请不要在存储空间中放置访问令牌的最大大小。我们期望随着我们添加和删除数据并更改其编码方式,它们会随着时间增长和收缩。

我们确实在一个地方提供了有关255个字符的指导。我已经更新了包含该信息的博客文章,并更新了我们的新访问令牌文档,以包含有关尺寸的注释:

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

对困惑感到抱歉。


84
来自Facebook的明确答案很合适,我们稍后将对其进行更改。
Dave Cohen 2013年

6
至少通过这种方式,我可以期待更改,因此我不会措手不及。
ZeeCoder

完全没有限制有点痛苦,因为我们当前将其存储在300字节的varchar2中,并且今天开始出现301-305字节令牌的问题。您是否建议我们改用Clob?还是我们可以使用一些合理的大尺寸?
Trampas Kirk

下次有人问我“我们应该为该字段设置最大大小”时,我肯定会保留该答案。真的,我喜欢它!Facebook,你让我
活了

7
MySQL需要对此进行上限。请给出一个现实的上限。例如1000个字符,10,000个字符,1,000,000,000个字符?没有上限就是不合理的。
Yahya Uddin'2

70

随着Facebook最近转向加密访问令牌,访问令牌的长度最多可以为255个字符。如果将访问令牌存储在数据库中,则该列应至少能够容纳varchar(255)。以下是2011年10月4日来自Facebook开发者博客的摘录:

“启用了加密访问令牌迁移后,访问令牌的格式已更改。新的访问令牌格式完全不透明,您不应对代码中的格式有任何依赖性。varchar(255)字段足以存储新令牌。”

完整的博客文章在这里:https : //developers.facebook.com/blog/post/572


2
+1获取更新的信息。这确实应该是现在公认的答案。
David Boike

14
似乎不再有效。我最近收到了一个256个字符长的访问令牌。
o_o 2012年

2
与上面的@o_o相同。我们越来越多地获得超过240个字符长的令牌,包括如今的255个以上。
埃里克·雷顿2013年

那很奇怪。在8000个样本中,我见过的最长的是126个字符。
Johnny Oshika

1
我们最近看到了344个字符访问令牌。
o_o 13-4-17

28

这个答案不再正确,我在FB的文档中找不到正确的值。我们已经收到了超过255个字符的访问令牌。我们正从VARCHAR转到SMALLTEXT,以尝试面向未来。


是的,我在生产应用程序中获得了284个字符,因此由于列为varchar(255)而出现数据库错误……
松仓由纪

相同。刚拿到257
蔡依林

1
SMALLTEXT还是MEDIUMTEXT?我以前也将我的access_token限制为VARCHAR(255),今天我要解决这个问题。
NobleUplift '18

9

The OAuth 2.0 Authorization Protocoldraft-ietf-oauth-v2-22)的1.4节开始

基于资源服务器安全性要求,访问令牌可以具有不同的格式,结构和使用方法(例如,密码属性)。访问令牌属性和用于访问受保护资源的方法超出了本规范的范围,并由伴随规范定义。

我在寻找“伴侣规格”,但没有找到任何相关内容,在11.2.2节中指出

o参数名称:access_token
o参数使用位置:授权响应,令牌响应
o更改控制器:IETF
o规范文档:[[本文档]]

这似乎表明access_token参数是在此规范中定义的。我猜该参数是,但是实际访问令牌尚未完全充实。

更新:该规范撰写的最新版本(draft-ietf-oauth-v2-31)包含一个附录,该附录更好地定义了对access_token参数的期望

A.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位长的令牌,因此最好假设MySQL中的TEXT列比varchar更安全。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.