在为OAuth / OAuth1a构建WWW-Authenticate标头值时,它要求对参数进行百分比编码。对于realm
参数是否应进行百分比编码,规范和实现尚不明确。
规范的5.4.1. Authorization Header部分内容如下:
OAuth协议参数在授权标头中发送 通过以下方式:
- 参数名称和值按“参数编码”进行编码。
- 对于每个参数,名称后均紧跟一个'='字符(ASCII代码61),一个“”“字符(ASCII代码34),参数值(MAY为空)和另一个'”'字符(ASCII代码34)。
- 根据[RFC2617],参数之间用逗号分隔(ASCII代码44)和可选的线性空格。
- 根据[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标头中的正确行为是什么?