Facebook OAuth2中access_token的长度是多少?

时间:2010-12-10 12:47:38

标签: facebook oauth

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

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

我甚至无法找到数字和字符串之间的数字或混合。

7 个答案:

答案 0 :(得分:124)

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

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

我们确实在一个地方提供了关于它是255个字符的指导。我已更新了包含该信息的博客文章,并更新了我们的新访问令牌文档,其中包含有关尺寸的说明:

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

很抱歉这个混乱。

答案 1 :(得分:68)

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

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

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

答案 2 :(得分:26)

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

答案 3 :(得分:8)

来自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

答案 4 :(得分:4)

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

答案 5 :(得分:2)

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

答案 6 :(得分:2)

我会从时间花费中更新答案。

从OAuth2文档中

  

此规范未定义访问令牌字符串大小。客户应避免对价值规模做出假设。授权服务器应记录它发出的任何值的大小。

this document的第4.2.2节)

注意:Facebook正在使用OAuth2,如this page所述。

所以现在,Facebook的开发者portail上似乎没有关于OAuth令牌长度的信息。雅虎似乎使用了400位长令牌,因此最好假设MySQL中的TEXT列比varchar更安全。