WWW-Authenticate realm 参数应该被编码吗?
Should the WWW-Authenticate realm parameter be encoded?
在为 OAuth/OAuth1a 构建 WWW-Authenticate header 值时,它需要 percent-encoding 参数。规范和实现对于 realm
参数是否应为 percent-encoded 不明确。
规范的 5.4.1. Authorization Header 部分内容如下:
The OAuth Protocol Parameters are sent in the Authorization header the
following way:
- Parameter names and values are encoded per Parameter Encoding.
- For each parameter, the name is immediately followed by an '=' character (ASCII code 61), a '"' character (ASCII code 34), the parameter value (MAY be empty), and another '"' character (ASCII code 34).
- Parameters are separated by a comma character (ASCII code 44) and OPTIONAL linear whitespace per [RFC2617].
- The OPTIONAL realm parameter is added and interpreted per [RFC2617], section 1.2.
For example:
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 中。但是,WWW-Authenticate header 示例中的 OAuth1a 规范将领域显示为 realm="http://sp.example.com/"
,这不是 percent-encoding 冒号或斜杠。
更令人困惑的是,这似乎因实施而异。许多 OAuth 实现没有对参数进行特殊处理,只是 percent-encode 所有参数,但其他 OAuth 实现对 realm
参数进行特殊处理,并将其从 percent-encoding.[=21= 中排除]
将 realm
参数添加到 WWW-Authenticate header 的正确行为是什么?
WWW-Authenticate header 和 realm
参数,特别是由 rfc2617 and rfc7235, which do not say anything about encoding. rfc7235 定义的示例,其中 "Login to \"apps\""
中的空格不是percent-encoded.
OAuth1a 规范的 rfc2617 and rfc7235 are the authority on the WWW-Authenticate header and realm
parameter while the OAuth1a spec is only the authority on the additional OAuth specific parameters. Therefore the realm
parameter should not be percent-encoded and section 5.4.1 应该被解释为仅谈论 OAuth 协议参数 关于 percent-encoding.
在为 OAuth/OAuth1a 构建 WWW-Authenticate header 值时,它需要 percent-encoding 参数。规范和实现对于 realm
参数是否应为 percent-encoded 不明确。
规范的 5.4.1. Authorization Header 部分内容如下:
The OAuth Protocol Parameters are sent in the Authorization header the following way:
- Parameter names and values are encoded per Parameter Encoding.
- For each parameter, the name is immediately followed by an '=' character (ASCII code 61), a '"' character (ASCII code 34), the parameter value (MAY be empty), and another '"' character (ASCII code 34).
- Parameters are separated by a comma character (ASCII code 44) and OPTIONAL linear whitespace per [RFC2617].
- The OPTIONAL realm parameter is added and interpreted per [RFC2617], section 1.2.
For example:
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 中。但是,WWW-Authenticate header 示例中的 OAuth1a 规范将领域显示为 realm="http://sp.example.com/"
,这不是 percent-encoding 冒号或斜杠。
更令人困惑的是,这似乎因实施而异。许多 OAuth 实现没有对参数进行特殊处理,只是 percent-encode 所有参数,但其他 OAuth 实现对 realm
参数进行特殊处理,并将其从 percent-encoding.[=21= 中排除]
将 realm
参数添加到 WWW-Authenticate header 的正确行为是什么?
WWW-Authenticate header 和 realm
参数,特别是由 rfc2617 and rfc7235, which do not say anything about encoding. rfc7235 定义的示例,其中 "Login to \"apps\""
中的空格不是percent-encoded.
rfc2617 and rfc7235 are the authority on the WWW-Authenticate header and realm
parameter while the OAuth1a spec is only the authority on the additional OAuth specific parameters. Therefore the realm
parameter should not be percent-encoded and section 5.4.1 应该被解释为仅谈论 OAuth 协议参数 关于 percent-encoding.