expired - Facebook OAuth2中access_token的长度是多少?




sdk login (7)

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

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

我甚至无法找到它是数字还是数字和字符串的混合。


Answers

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


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

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

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


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

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

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

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

对困惑感到抱歉。


The OAuth 2.0 Authorization Protocol第1.4节( draft-ietf-oauth-v2-22

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

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

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


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


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

从OAuth2文档中,

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

本文件的第4.2.2节)

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

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


我不认为你可以使用SlidingMenu库存来实现它,但是你可以使用SlidingMenuslidingmenu





facebook oauth