题
最多可以有多少个字符 授权访问 令牌和 oauth 访问秘密 是以及允许的字符是什么?我需要将它们存储在数据库中。
解决方案
我不知道有任何明确的限制。该规格没有任何。 也就是说,OAuth凭证往往是作为URL参数传递等方面有一些相同的限制。即需要适当编码,等等。
其他提示
的OAuth没有指定令牌的格式或内容。我们简单地使用加密名称 - 值对的令牌。您可以使用令牌任何字符,但它更容易处理,如果令牌网址安全。我们通过一个安全的网址Base64编码的密文实现这一目标。
由于大多数人已经指出。基于OAuth的认证规范不给你明确的方向,但他们不说......
HTTP:这引//tools.ietf。组织/ HTML /草案-锤OAuth的10#部-4.9
“服务器应该小心分配 共享的秘密,其是足够长的时间, 和足够的随机,抵制这种 对中的至少长度的攻击 时间,所述共享秘密是 有效的“。
“。当然,服务器被敦促犯错 谨慎的一面,并使用 最长秘密合理“。
在另一方面,你应该考虑浏览器的网址的长度上限:
如果你读的规格,它说,
在授权服务器发出注册客户端一个客户端点击 标识符 - 表示注册结果的唯一字符串 由客户端提供的信息。客户端标识符不是结果 秘密;它被暴露在资源拥有者,不得使用结果 单独客户端验证。客户标识符是唯一的结果 授权服务器。
在客户端标识符串大小未定义通过该点击 规格。客户应避免对结果的假设 标识符的大小。授权服务器应记录大小点击 任何标识符的它发出。
其次,访问令牌应作为发送报头,而不是作为一个URL PARAM。
授权:承载<令牌>
OAuth凭证是概念性字节,而不是字符的任意大小的序列。在URL中,它就会被使用标准URL转义机制编码的:
unreserved = ALPHA, DIGIT, '-', '.', '_', '~'
一切未未预留获取%编码
我不知道你是否只是谈论被传来传去的的oauth_token参数。通常情况下,需要存储和传输,以及,例如oauth_token_secret,oauth_signature等它们中的一些具有不同的数据类型的附加参数,例如,oauth_timestamp是表示自1970年以来秒的整数(以十进制ASCII数字编码)。
OAuth 令牌的有效字符受到 HTTP 标头值限制,因为 OAuth 令牌经常在 HTTP 标头“授权”中发送。
HTTP 标头的有效字符由以下方式指定 https://tools.ietf.org/html/rfc7230#section-3.2.6. 。或者,您可以检查一些流行的 HTTP 客户端库的 HTTP 标头验证代码,例如参见 headers.checkNameAndValue() OkHttp框架的util: https://github.com/square/okhttp/blob/master/okhttp/src/main/java/okhttp3/Headers.java
这还不是全部。我不会包含 HTTP 标头分隔符 (;和许多其他)和空白符号(' ' 和 ' ')和双引号 (")(请参阅 https://tools.ietf.org/html/rfc7230#section-3.2.6),因为在 HTTP 标头中使用之前需要转义 OAuth 令牌。人们在curl测试请求中经常使用令牌,因此好的令牌生成器不会添加此类字符。但在做出任何假设之前,您应该检查哪些字符可能会生成您的服务正在使用的 Oauth 令牌生成器。
要具体,即使OAuth规范不说什么,如果你正在使用Java和MySQL那么这将是16个字符,因为我们使用UUID通常生成的令牌,并在数据库中存储为BINARY(16)。我知道这些细节,因为我最近做使用OAuth的发展。