Facebook OAuth2中access_token的长度是多less?

我search谷歌和StackOverflowfind我的问题的答案,但我找不到一个。

我想将access_token存储到我的数据库以便离线访问,我想确保指定正确的列长度。

我什至不能find,如果它只是一个数字或数字和string之间的混合。

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

请不要在存储器上为访问令牌设置最大大小。 我们预计随着我们添加和删除数据并改变它们的编码方式,它们会随着时间的推移而不断增长和缩小。

我们曾经在一个地方提供了255个字符的指导。 我已更新了包含该信息的博客文章,并更新了我们的新访问令牌文档以包含关于大小的说明:

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

对困惑感到抱歉。

随着Facebook最近转向encryption访问令牌,访问令牌的长度可以达到255个字符。 如果要将访问令牌存储在数据库中,那么该列应该至less可以容纳varchar(255)。 以下是2011年10月4日Facebook开发者博客的摘录:

“启用encryption访问令牌迁移后,访问令牌的格式已经改变,新的访问令牌格式是完全不透明的,您不应该对代码中的格式有任何依赖性, varchar(255)字段就足够了存储新的令牌“。

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

这个答案不再正确,我在FB的文档中找不到一个正确的值。 我们一直在接收超过255个字符的访问令牌。 我们正在从VARCHAR转移到SMALLTEXT,而不是去尝试未来的事情。

The OAuth 2.0 Authorization Protocol ( draft-ietf-oauth-v2-22 )的1.4节,

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

我查找了“伴侣规格”,但没有find任何相关的内容,在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至less应该有一个字符长度,但是本规范定义的时间没有限制。

注意他们定义了VSCHAR =%x20-7E

Facebook访问令牌可能超过255个字符。 我有很多错误,如ActiveRecord::StatementInvalid: PG::StringDataRightTruncation: ERROR: value too long for type character varying(255)的价值是Facebook访问令牌。 不要使用stringtypes的列,因为它的长度是有限的。 您可以使用texttypes列来存储令牌。

最近,我们的应用程序已经看到他们超过100个字符。 我还在寻找文档,所以我可以为他们找出一个“安全”的字段大小。

我会更新时间花费的答案。

从OAuth2文档中,

访问令牌string的大小在本规范中未定义。 客户应该避免对价值大小做出假设。 授权服务器应logging它发布的任何值的大小。

( 本文件的第4.2.2节)

注意:Facebook正在使用OAuth2,正如本页所述 。

所以现在,关于OAuth令牌的长度,Facebook的开发者portail上没有任何信息可用。 雅虎似乎使用了一个400位长的标记,所以最好假定MySQL中的TEXT列比varchar安全。