0

在为 OAuth/ OAuth1a构建 WWW-Authenticate 标头值时,它要求对参数进行百分比编码。规范和实现对于realm参数是否应该进行百分比编码是模棱两可的。

5.4.1 节。规范的授权标头内容为:

OAuth 协议参数通过以下方式在授权标头中发送:

  1. 参数名称和值按照参数编码进行编码。
  2. 对于每个参数,名称后面紧跟一个 '=' 字符(ASCII 码 61)、一个 '"' 字符(ASCII 码 34)、参数值(可以为空)和另一个 '"' 字符(ASCII 码34)。
  3. 根据 [RFC2617],参数由逗号字符(ASCII 代码 44)和可选线性空格分隔。
  4. 根据 [RFC2617] 第 1.2 节添加和解释 OPTIONAL 领域参数。

例如:

            Authorization: OAuth realm="http://sp.example.com/",
            oauth_consumer_key="0685bd9184jfhq22",
            oauth_token="ad180jjd733klru7",
            oauth_signature_method="HMAC-SHA1",
            oauth_signature="wOJIO9A2W5mFwDgiDvZbTSMK%2FPY%3D",
            oauth_timestamp="137131200",
            oauth_nonce="4572616e48616d6d65724c61686176",
            oauth_version="1.0"

如果这些步骤是按顺序执行的,那么似乎只有 OAuth 特定参数是要进行 url 编码的。

如果不打算按顺序执行这些步骤,则该realm参数可能包含在步骤 1 中。但是,OAuth1a规范中的 WWW-Authenticate 标头示例显示了realm="http://sp.example.com/"不是对冒号或斜杠进行百分比编码的领域。

更令人困惑的是,这似乎因实施而异。许多 OAuth 实现对参数没有特殊处理,只是对所有参数进行百分比编码,但其他 OAuth 实现对realm参数进行特殊处理并将其从百分比编码中排除。

realm将参数添加到 WWW-Authenticate 标头的正确行为是什么?

4

1 回答 1

0

特别是WWW-Authenticate 标头和realm参数由rfc2617rfc7235定义,它们没有说明任何关于编码的内容。rfc7235显示了一个示例,其中的空格"Login to \"apps\""不是百分比编码的。

rfc2617rfc7235是 WWW-Authenticate 标头和realm参数的权限,而OAuth1a规范仅是附加 OAuth 特定参数的权限。因此,该realm参数不应进行百分比编码,并且 OAuth1a 规范的第5.4.1节应解释为仅讨论有关百分比编码的OAuth 协议参数

于 2019-01-28T16:15:07.323 回答