我在Google和StackOverflow上搜索了我的问题的答案,但我找不到答案。
我想将access_token存储到我的数据库以进行离线访问,我想确保指定列的正确长度。
我甚至无法找到数字和字符串之间的数字或混合。
答案 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)字段足以存储新标记。“
答案 2 :(得分:26)
这个答案不再正确,我在FB的文档中找不到更正的值。我们一直在接收超过255个字符的访问令牌。我们正在从VARCHAR转向SMALLTEXT,而不是尝试面向未来的事情。
答案 3 :(得分:8)
来自The OAuth 2.0 Authorization Protocol
(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的长度至少应为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更安全。