【问题标题】:What are the characteristics of an OAuth token?OAuth 令牌的特征是什么?
【发布时间】:2010-11-10 01:26:12
【问题描述】:

oauth access令牌和oauth access secret可以有多少个字符,允许的字符是多少?我需要将它们存储在数据库中。

【问题讨论】:

    标签: oauth


    【解决方案1】:

    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 令牌生成器。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 这个答案中的“我们”是谁?
      • 我的意思是“我们”的“开发者”
      【解决方案3】:

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

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

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

      其次,Access Token 应该作为 header 发送,而不是 URL 参数。

      授权:承载。

      【讨论】:

        【解决方案4】:

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

        引用自:https://datatracker.ietf.org/doc/html/draft-hammer-oauth-10#section-4.9

        "服务器应该小心分配 足够长的共享秘密, 并且足够随机,以抵抗这种 攻击时间至少为 共享秘密的时间 有效。”

        "当然,敦促服务器出错 谨慎起见,并使用 最长的秘密是合理的。”

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

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

        【讨论】:

          【解决方案5】:

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

          【讨论】:

            【解决方案6】:

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

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

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

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

            【讨论】:

            • Google+ 在其 OAuth 2.0“代码”中也使用斜杠“/”:code=4/rymOMYEWum5IN20h0mXts9in0mRf
            【解决方案7】:

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

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2011-08-21
              • 2012-09-04
              • 1970-01-01
              • 2014-07-23
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多