Я использую Apache httpd как обратный прокси перед веб-приложением. Аутентификация выполняется модулем (mod_auth_mellon), который устанавливает различные переменные среды запроса с данными об аутентифицированном пользователе (имя пользователя, отображаемое имя и т. д.).
Я использую mod_headers для удаления заголовков из входящего запроса и замены их значениями переменных среды запроса, которые были установлены mod_auth_mellon.
RequestHeader unset mellon_uid
RequestHeader set mellon_uid "%{mellon_uid}e" env=mellon_uid
Таким образом, любой предоставленный клиентом mellon_uid
заголовок отбрасывается. Если mod_auth_mellon считает, что пользователь вошел в систему, то mellon_uid
к запросу, который отправляется далее в веб-приложение, добавляется новый заголовок запроса.
До сих пор мне удавалось справляться с этой задачей с помощью mod_macro:
Use Attribute uid
Use Attribute display_name
Use Attribute email
... и так далее, где Attribute
— макрос, который расширяется до двух RequestHeader
директив выше для предоставленного атрибута.
Однако некоторые данные пользователя являются многозначными, для которых mod_auth_mellon устанавливает несколько переменных среды запроса в форме:
mellon_foo_0 = first
mellon_foo_1 = second
mellon_foo_2 = third
mellon_foo_N = 3
Поскольку количество значений атрибута может варьироваться, я не могу полагаться на статический список переменных для подобной обработки.
Я бы хотел избежать использования MellonMergeEnvVars
, что вместо этого установит следующее:
mellon_foo = first;second;third
mellon_foo_N = 3
... поскольку это означает, что веб-приложению теперь придется иметь дело со сложностью правильного синтаксического анализа mellon_foo
заголовка запроса, работать со значениями, которые сами по себе содержат точки с запятой и т. д. Действительно, мне не ясно, выполняет ли mod_auth_mellon какое-либо экранирование, что делает невозможным однозначный синтаксический анализ (если я прав...)
решение1
Я думаю, что пока вы смотрите только на первые mellon_foo_N
значения, здесь не должно быть никакого риска, потому что mod_auth_mellon всегда будет устанавливать эти значения сам, переопределяя любые значения, которые пользователь может попытаться отправить. Он также должен всегда устанавливать mellon_foo_N
, но вы всегда можете изначально его сбросить, чтобы быть уверенным.