2015-03-26 2 views
21

Можно ли включить несколько заголовков полномочий в HTTP-сообщение? В частности, я хотел бы включить один из типов токенов-носителей (передающий токен доступа OAuth) и один из базового типа (передающий имя пользователя с паролем base64).Несколько заголовков авторизации HTTP?

GET /presence/alice HTTP/1.1 
Host: server.example.com 
Authorization: Bearer mF_9.B5f-4.1JqM 
Authorization: Basic YXNkZnNhZGZzYWRmOlZLdDVOMVhk 

Я не вижу причин, по которым это не должно быть возможным, просто хотел проверить его с сообществом, чтобы быть уверенным.

+0

c.f. http://stackoverflow.com/questions/3761845/multiple-authentication-schemes-for-http-authorization-header –

ответ

9

Нет, это невозможно. См. Определение синтаксиса в http://greenbytes.de/tech/webdav/rfc7235.html#header.authorization

+1

Пока я должен вам верить, так как я знаю, кто вы, что вы говорите, что это противоречит спецификации: При создании своих значений пользовательский агент должен сделать это, выбрав проблему с тем, что, по ее мнению, считается самой безопасной аутентификационной системой, которую он понимает, получая учетные данные от пользователя по мере необходимости ». - В частности, 1) «должно», 2) token68 исключает «,» означает, что запятая не будет интерпретироваться как часть токена, и 3) В спецификации нет ничего, чтобы сказать несколько Auth. заголовки не могут быть предоставлены, то есть 2 заголовка, разделенных CRLF. См. Также https://github.com/nickstenning/nginx-multiauth –

+4

Вы можете использовать только несколько полей заголовка, если они определены с использованием синтаксиса списка; см. http://greenbytes.de/tech/webdav/rfc7230.html#rfc.section.3.2.2.p.2 –

5

У меня был аналогичный вопрос. Это, по-видимому, довольно распространенная проблема (Link to question). Я закончил с изменением заголовка авторизации для маркера на предъявителя с нестандартным один, как

X-Auth: однонаправленного mF_9.B5f-4.1JqM

Таким образом, это просто еще один заголовок HTTP и основное http-авторизация будет проходить. Если вы разрабатываете свой собственный API, это не должно быть проблемой.

Некоторые дальнейшие исследования

На основе RFC 2617 здесь некоторые интересные подробности.

Агент пользователя ДОЛЖЕН выбрать использовать одну из проблем, с самой сильной Идентой-схемой это понимает и запрос учетных данных от пользователя, основываясь на этот вызова.

Обратите внимание, что многие браузеры будут распознавать Basic и потребуют от , что это будет первая схема аутентификации. Серверы должны только включать Basic, если это минимально приемлемо.

+1

В настоящее время RFC 2617 не имеет значения. Вы должны проверить RFC 7235. –

10

Это должно быть возможно, вы просто должны добавить запятую между значениями полей, например:

GET /presence/alice HTTP/1.1 
Host: server.example.com 
Authorization: Bearer mF_9.B5f-4.1JqM, Basic YXNkZnNhZGZzYWRmOlZLdDVOMVhk 

Это определено в RFC7230, раздел 3.2.2 Порядок полей:

Отправитель НЕ ДОЛЖЕН генерировать несколько полей заголовка с тем же именем поля в сообщении, если только полное значение поля для этого поля заголовка не определено как список, разделенный запятой [т.е., # (значения)], или поле заголовка - это колодец (как указано ниже).

Получатель МОЖЕТ комбинировать несколько полей заголовков с тем же именем поля в одну пару «имя поля: значение поля», не изменяя семантику сообщения, добавляя каждое последующее значение поля к объединенному значению поля в порядке , разделенных запятой. Поэтому порядок, в котором получены поля заголовка с тем же именем поля, имеет важное значение для интерпретации значения комбинированного поля; прокси НЕ ДОЛЖЕН изменять порядок этих значений поля при пересылке сообщения.

Я не знаю, согласны ли все веб-серверы - на момент написания статьи я нахожусь в центре дискуссии с коллегой о том, должно ли это работать или нет.

+1

Ответ, кажется, не является - по крайней мере, не с Apache 2.4. – Renee

+3

Я думаю, что это должен быть принятый ответ. Прекрасно подходит для меня с запятой. Basic auth и JWT. – JedatKinports

+1

Это, по-видимому, решает проблему OP наилучшим образом. – span

Смежные вопросы