OAuth令牌的特征是什么?

时间:2009-07-12 04:06:11

标签: oauth

oauth access 令牌和 oauth访问密钥可以包含多少个字符?允许的字符是多少?我需要将它们存储在数据库中。

7 个答案:

答案 0 :(得分:11)

我不确定是否有任何明确的限制。 spec doesn't have any。{{3}}。 也就是说,OAuth令牌通常作为url参数传递,因此具有一些相同的限制。即需要正确编码等。

答案 1 :(得分:4)

OAuth未指定令牌的格式或内容。我们只使用加密的名称 - 值对作为标记。您可以在令牌中使用任何字符,但如果令牌是URL安全的,则更容易处理。我们通过使用URL安全的Base64编码密文来实现这一目的。

答案 2 :(得分:2)

正如大多数人已经指出的那样。 OAuth规范没有给出确切的指示,但他们确实说...

引自:http://tools.ietf.org/html/draft-hammer-oauth-10#section-4.9

  

“服务器应该小心分配   共享秘密足够长,   而且足够随意,抵制这样的   至少攻击的长度   共享秘密的时间   有效的“。

     

“当然,服务器被敦促犯错误   在谨慎方面,并使用   最长的秘密是合理的。“

另一方面,您应该考虑浏览器的最大URL长度:

请参阅:http://www.boutell.com/newfaq/misc/urllength.html

答案 3 :(得分:2)

如果您阅读规范,它会说,

  

授权服务器向注册客户端发出客户端
  identifier - 表示注册的唯一字符串
  客户提供的信息。客户标识符不是
  秘密;它暴露给资源所有者,不得使用   单独进行客户端验证。客户标识符是唯一的   授权服务器。

     

此客户端标识符字符串大小未定义   规格。客户应避免对其进行假设   标识符大小。授权服务器应该记录文件大小
  它发出的任何标识符。

其次,访问令牌应作为标头发送,而不是作为URL参数发送。

授权:持票人<令牌GT;

答案 4 :(得分:1)

OAuth令牌在概念上是一个任意大小的字节序列,而不是字符。在URL中,它使用标准的URL转义机制进行编码:

  unreserved = ALPHA, DIGIT, '-', '.', '_', '~'

所有未预留的内容都会被%编码。

我不确定你是否只是谈论传递的oauth_token参数。通常,还需要存储和传输其他参数,例如oauth_token_secret,oauth_signature等。其中一些参数具有不同的数据类型,例如,oauth_timestamp是一个表示自1970年以来的秒数的整数(以十进制ASCII数字编码)。

答案 5 :(得分:0)

OAuth令牌的有效字符受HTTP标头值限制的限制,因为OAuth令牌经常在HTTP标头中发送"授权"。

HTTP标头的有效字符由https://tools.ietf.org/html/rfc7230#section-3.2.6指定。或者,您可以检查一些流行的HTTP客户端库的HTTP头验证代码,例如,参见OkHttp框架的 Headers.checkNameAndValue() util:https://github.com/square/okhttp/blob/master/okhttp/src/main/java/okhttp3/Headers.java

这不是全部。我不会包含HTTP标头分隔符(;和许多其他)和空格符号('' \ t')和双引号(")(请参阅https://tools.ietf.org/html/rfc7230#section-3.2.6)因为在HTTP标头中使用之前需要转义OAuth令牌。人们在卷曲测试请求中经常使用令牌,因此好的令牌生成器不会添加这样的字符。但是你应该在做出任何假设之前检查哪些字符可能产生服务正在使用的Oauth令牌生成器。

答案 6 :(得分:-4)

具体来说,即使Oauth规范没有说什么,如果你使用java和mysql那么它将是16个字符,因为我们通常使用UUID生成令牌并将其存储为BINARY(16)数据库。我知道这些细节,因为我最近使用OAuth进行了开发。