При создании значения заголовка WWW-Authenticate для OAuth / OAuth1a требуется процентное кодирование параметров.Спецификация и реализации неоднозначны относительно того, должен ли параметр realm
кодироваться в процентах или нет.
Раздел 5.4.1.Заголовок авторизации из спецификации гласит:
Параметры протокола OAuth отправляются в заголовок авторизации следующим образом:
- Имена и значения параметров кодируются для каждого параметраКодирование.
- Для каждого параметра за именем сразу следует символ «=» (код ASCII 61), символ «» (код ASCII 34), значение параметра (МОЖЕТ быть пустым) и еще один символ 'Символ «» (код ASCII 34).
- Параметры разделяются запятой (код 44 ASCII) и ДОПОЛНИТЕЛЬНЫМ линейным пробелом в соответствии с [RFC2617].
- ДОПОЛНИТЕЛЬНЫЙ параметр области добавляется и интерпретируется в соответствии с [RFC2617], раздел 1.2.
Например:
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 в спецификации OAuth1a показываетобласть как realm="http://sp.example.com/"
, которая не является процентным кодированием двоеточия или косой черты.
Чтобы сделать вещи более запутанными, кажется, что это варьируется от реализации к реализации.Многие реализации OAuth не дают специальной обработки параметров и просто кодируют все из них в процентах, но другие реализации OAuth дают особую обработку параметру realm
и исключают его из кодирования процентов.
Что является правильнымповедение для добавления параметра realm
в заголовок WWW-Authenticate?