2009-07-12 109 views

回答

11

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

1

OAuth令牌在概念上是任意大小的字节序列,而不是字符。在网址时,它会使用标准URL转义机制编码:

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

一切都毫无保留的没有得到%编码。

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

+2

Google+的用途斜杠“/”为其OAuth 2.0“代码”也是:``code = 4/rymOMYEWum5IN20h0mXts9in0mRf`` – 2012-05-21 11:11:54

4

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

2

正如大多数人已经指出的那样。基于OAuth的认证规范不给你明确的方向,但他们说...

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

“服务器应仔细分配 共享秘密,这是足够长的时间, 和随机足以抵御 攻击的时间长度至少为 ,共享密钥为 有效。“

“当然,服务器在提醒时应该谨慎,并且最好使用最长的秘密。”

,另一方面

,你应该考虑浏览器的最大URL长度:

见:http://www.boutell.com/newfaq/misc/urllength.html

2

如果你读了规范,它说,

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

客户端标识符字符串大小由此
规范未定义。客户应该避免对标识符大小做出假设。授权服务器应该记录它发布的任何标识符的大小

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

授权:承载<令牌>。

-4

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

+0

在这个答案中,我们是谁? – 2014-08-11 07:00:36

0

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

HTTP标头的有效字符由https://tools.ietf.org/html/rfc7230#section-3.2.6指定。另外,您可以检查一些流行的HTTP客户端库的HTTP头验证码,例如见Headers.checkNameAndValue() UTIL OkHttp框架: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令牌生成器。