是否应该对WWW-Authenticate领域参数进行编码?

时间:2019-01-28 16:15:07

标签: oauth oauth-1.0a www-authenticate

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

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

  

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

     
      
  1. 参数名称和值按“参数编码”进行编码。
  2.   
  3. 对于每个参数,名称后均紧跟一个'='字符(ASCII代码61),一个“”“字符(ASCII代码34),参数值(MAY为空)和另一个'”'字符(ASCII代码34)。
  4.   
  5. 根据[RFC2617],参数之间用逗号分隔(ASCII代码44)和可选的线性空格。
  6.   
  7. 根据[RFC2617]第1.2节添加和解释了OPTIONAL领域参数。
  8.   
     

例如:

            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标头中的正确行为是什么?

1 个答案:

答案 0 :(得分:0)

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

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