【发布时间】:2010-11-10 01:26:12
【问题描述】:
oauth access令牌和oauth access secret可以有多少个字符,允许的字符是多少?我需要将它们存储在数据库中。
【问题讨论】:
标签: oauth
oauth access令牌和oauth access secret可以有多少个字符,允许的字符是多少?我需要将它们存储在数据库中。
【问题讨论】:
标签: oauth
OAuth 令牌的有效字符受 HTTP 标头值限制,因为 OAuth 令牌经常在 HTTP 标头“授权”中发送。
HTTP 标头的有效字符由https://www.rfc-editor.org/rfc/rfc7230#section-3.2.6 指定。或者,您可以查看一些流行的 HTTP 客户端库的 HTTP 标头验证代码,例如查看 OkHttp 框架的 Headers.checkNameAndValue() 实用程序:https://github.com/square/okhttp/blob/master/okhttp/src/main/java/okhttp3/Headers.java
这还不是全部。我不会包含 HTTP 标头分隔符(; 和许多其他)和空白符号(' ' 和 '\t')和双引号(“)(请参阅https://www.rfc-editor.org/rfc/rfc7230#section-3.2.6),因为它需要在 HTTP 中使用之前转义 OAuth 令牌标头。人类在 curl 测试请求中经常使用令牌,因此好的令牌生成器不会添加此类字符。但是在做出任何假设之前,您应该检查哪些字符可能会生成您的服务正在使用的 Oauth 令牌生成器。
【讨论】:
具体来说,即使 Oauth 规范没有说明任何内容,如果您使用的是 java 和 mysql,那么它将是 16 个字符,因为我们通常使用 UUID 生成令牌并将其作为 BINARY(16) 存储在数据库中。我知道这些细节,因为我最近使用 OAuth 进行了开发。
【讨论】:
如果您阅读规范,它会说,
授权服务器向注册的客户端发出客户端
标识符 - 表示注册的唯一字符串
客户提供的信息。客户端标识符不是
秘密;它向资源所有者公开,不得使用
单独用于客户端身份验证。客户端标识符对
是唯一的 授权服务器。客户端标识符字符串大小未定义此
规格。客户应避免对
标识符大小。授权服务器应该记录大小
它发出的任何标识符。
其次,Access Token 应该作为 header 发送,而不是 URL 参数。
授权:承载。
【讨论】:
正如大多数人已经指出的那样。 OAuth 规范没有给你确切的方向,但他们确实说......
引用自:https://datatracker.ietf.org/doc/html/draft-hammer-oauth-10#section-4.9
"服务器应该小心分配 足够长的共享秘密, 并且足够随机,以抵抗这种 攻击时间至少为 共享秘密的时间 有效。”
"当然,敦促服务器出错 谨慎起见,并使用 最长的秘密是合理的。”
另一方面,您应该考虑浏览器的最大 URL 长度:
【讨论】:
OAuth 不指定令牌的格式或内容。我们只是使用加密的名称-值对作为令牌。您可以在令牌中使用任何字符,但如果令牌是 URL 安全的,则处理起来会容易得多。我们通过使用 URL 安全的 Base64 对密文进行编码来实现这一点。
【讨论】:
OAuth 令牌在概念上是任意大小的字节序列,而不是字符。在 URL 中,它使用标准的 URL 转义机制进行编码:
unreserved = ALPHA, DIGIT, '-', '.', '_', '~'
所有未被保留的内容都被 % 编码。
我不确定您是否只是谈论传递的 oauth_token 参数。通常,还需要存储和传输额外的参数,例如 oauth_token_secret、oauth_signature 等。其中一些具有不同的数据类型,例如,oauth_timestamp 是一个整数,表示自 1970 年以来的秒数(以十进制 ASCII 数字编码)。
【讨论】:
code=4/rymOMYEWum5IN20h0mXts9in0mRf
我不确定是否有任何明确的限制。 spec doesn't have any。 也就是说,OAuth 令牌通常作为 url 参数传递,因此具有一些相同的限制。即需要正确编码等。
【讨论】: