【问题标题】:OAUTH Parameter EncodingOAUTH 参数编码
【发布时间】:2019-01-19 11:05:30
【问题描述】:

在实施 OAUTH 时,我遇到了以下问题。在创建签名库时,编码参数应该重新编码还是应该在规范化参数时将编码参数排除在编码之外?

【问题讨论】:

  • 是的,我的意思是 URL 编码。

标签: c# encoding oauth percent-encoding


【解决方案1】:

当我阅读文档时,您似乎需要应用双重编码:

例如HTTP请求:

   POST /request?b5=%3D%253D&a3=a&c%40=&a2=r%20b HTTP/1.1
   Host: example.com
   Content-Type: application/x-www-form-urlencoded
   Authorization: OAuth realm="Example",
                  oauth_consumer_key="9djdj82h48djs9d2",
                  oauth_token="kkk9d7dh3k39sjv7",
                  oauth_signature_method="HMAC-SHA1",
                  oauth_timestamp="137131201",
                  oauth_nonce="7d8f3e4a",
                  oauth_signature="djosJKDKJSD8743243%2Fjdk33klY%3D"

   c2&a3=2+q

包含以下(完全解码的)参数 签名基础字符串:

           +------------------------+------------------+
           |          Name          |       Value      |
           +------------------------+------------------+
           |           b5           |       =%3D       |
           |           a3           |         a        |
           |           c@           |                  |
           |           a2           |        r b       |
           |   oauth_consumer_key   | 9djdj82h48djs9d2 |
           |       oauth_token      | kkk9d7dh3k39sjv7 |
           | oauth_signature_method |     HMAC-SHA1    |
           |     oauth_timestamp    |     137131201    |
           |       oauth_nonce      |     7d8f3e4a     |
           |           c2           |                  |
           |           a3           |        2 q       |
           +------------------------+------------------+

请注意,“b5”的值是“=%3D”而不是“==”。“c@”和 “c2”有空值。虽然在此指定的编码规则 用于构建签名库的规范 字符串排除使用“+”字符(ASCII 代码 43) 表示编码的空格字符(ASCII 码 32),这种做法 广泛用于“application/x-www-form-urlencoded”编码值, 并且必须正确解码,如“a3”之一所示 参数实例(“a3”参数在此使用了两次 请求)。

【讨论】:

    【解决方案2】:

    根据规范:https://www.rfc-editor.org/rfc/rfc5849

    每个级别的参数都经过编码。

    所以每个 OAuth(不是正在创建的签名)和用户参数都被编码。

    然后将这些(领域除外)加入到排序的参数列表中。

    该字符串是 URL 编码的,并与 URL 编码的方法和 URL 编码的基本 URL 连接。

    这是基本字符串,在被散列之前是 2 级编码。

    【讨论】:

      猜你喜欢
      • 2014-05-31
      • 1970-01-01
      • 1970-01-01
      • 2011-09-08
      • 2017-07-26
      • 1970-01-01
      • 2015-11-11
      • 2011-07-02
      • 2011-07-23
      相关资源
      最近更新 更多