【发布时间】:2019-01-28 16:15:07
【问题描述】:
在为 OAuth/OAuth1a 构建 WWW-Authenticate 标头值时,它需要对参数进行百分比编码。规范和实现对于 realm 参数是否应该进行百分比编码不明确。
规范的5.4.1. Authorization Header 部分内容如下:
OAuth 协议参数在 Authorization 标头中发送 以下方式:
- 参数名称和值按照参数编码进行编码。
- 对于每个参数,名称后面紧跟一个 '=' 字符(ASCII 代码 61)、一个 '"' 字符(ASCII 代码 34)、参数值(可以为空)和另一个 '"' 字符(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 标头的正确行为是什么?
【问题讨论】:
标签: oauth oauth-1.0a www-authenticate