【问题标题】:Should the WWW-Authenticate realm parameter be encoded?应该对 WWW-Authenticate 领域参数进行编码吗?
【发布时间】:2019-01-28 16:15:07
【问题描述】:

在为 OAuth/OAuth1a 构建 WWW-Authenticate 标头值时,它需要对参数进行百分比编码。规范和实现对于 realm 参数是否应该进行百分比编码不明确。

规范的5.4.1. Authorization Header 部分内容如下:

OAuth 协议参数在 Authorization 标头中发送 以下方式:

  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 编码。

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

为了让事情更加混乱,这似乎因实施而异。许多 OAuth 实现对参数没有特殊处理,只是对所有参数进行百分比编码,但其他 OAuth 实现对realm 参数进行特殊处理,并将其从百分比编码中排除。

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

【问题讨论】:

    标签: oauth oauth-1.0a www-authenticate


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-09-30
      • 2012-01-08
      • 2014-11-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-28
      相关资源
      最近更新 更多