Я использую 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 выполняет какое-либо экранирование, что делает невозможным однозначный синтаксический анализ (если я прав ...)
Я думаю, что пока вы смотрите только на первое mellon_foo_N
values, здесь не должно быть никакого риска, потому что mod_auth_mellon всегда будет устанавливать эти значения самостоятельно, переопределяя любые значения, которые пользователь может попытаться отправить. Он также должен всегда устанавливать mellon_foo_N
, но вы всегда можете сначала отключить его, чтобы быть уверенным.