Я потерян, и я не знаю, где еще я мог бы спросить после нескольких часов и дней исследований.
Я пытаюсь интегрировать и приложение, написанное на Perl (OTRS), работающее с Apache, чтобы SSO всех моих агентов.Между клиентом и сервером OTRS находится Tivoli Access Manager, и на нем сконфигурировано соединение.Когда клиент открывает ресурс с поддержкой WAM OTRS, TAM-сервер уже выполняет SSO, беря идентификатор пользователя из билета Kerberos и проверяя, может ли данный пользователь получить доступ к соединению, если он / она, то TAM устанавливает переменную с именем iv-user.в HTTPheader запроса и передает его в приложение OTRS.
Когда я открываю URL http://myserver/otrs/index.pl, я вижу, что Apache получает переменную iv-user в заголовке HTTP (я настроил mod_log_forensic в Apache):
Когда я сейчас вхожу в систему со своим идентификатором пользователя и паролем и обращаюсь к разделу информации системы, я вижу, что переменная была в основном «перезаписана?» В HTTP_IV_USER
В конце, когда я вызываю URL-адрес, вызывается CGI-скрипт, и, насколько я понимаю, «перезапись» - это обычная CGI-вещь, так сказать https://tools.ietf.org/html/rfc3875
“The server SHOULD set meta-variables specific to the protocol and
scheme for the request. Interpretation of protocol-specific
variables depends on the protocol version in SERVER_PROTOCOL. The
server MAY set a meta-variable with the name of the scheme to a
non-NULL value if the scheme is not the same as the protocol. The
presence of such a variable indicates to a script which scheme is
used by the request.
Meta-variables with names beginning with "HTTP_" contain values read
from the client request header fields, if the protocol used is HTTP.
The HTTP header field name is converted to upper case, has all
occurrences of "-" replaced with "_" and has "HTTP_" prepended to
give the meta-variable name. The header data can be presented as
sent by the client, or can be rewritten in ways which do not change
its semantics. If multiple header fields with the same field-name
are received then the server MUST rewrite them as a single value
having the same semantics. Similarly, a header field that spans
multiple lines MUST be merged onto a single line. The server MUST,
if necessary, change the representation of the data (for example, the
character set) to be appropriate for a CGI meta-variable.”
Теперь я включаюЕдиный вход в OTRS (это в основном одна строка), поскольку OTRS полагается, что пользователь уже прошел предварительную проверку подлинности, и ищет переменную REMOTE_USER для единого входа в OTRS:
HTTPBasicAuth for Agents
If you want to implement a "single sign on" solution for all your agents, you can use HTTP basic authentication (for all your systems) and the HTTPBasicAuth module for OTRS (see Example below).
Example 4.14. Authenticate Agents using HTTPBasic
# This is an example configuration for an apache ($ENV{REMOTE_USER})
# auth. backend. Use it if you want to have a singe login through
# apache http-basic-auth
$Self->{'AuthModule'} = 'Kernel::System::Auth::HTTPBasicAuth';
# Note:
#
# If you use this module, you should use as fallback
# the following configuration settings if the user is not authorized
# apache ($ENV{REMOTE_USER})
$Self->{LoginURL} = 'http://host.example.com/not-authorised-for-otrs.html';
$Self->{LogoutURL} = 'http://host.example.com/thanks-for-using-otrs.html';
Поскольку я не хотел связыватьсяв производственной среде я настроил свою собственную тестовую среду и для имитации сервера TAM я использовал Modify Headers for Google Chrome
для установки заголовков.
Когда я устанавливаю переменную в Modify Headers
в заголовке непосредственно на HTTP_IV_USER
не iv_user
и взять значение из HTTP_IV_USER
и установить его на REMOTE_USER
в Apache SetEnvIf HTTP_IV_USER "(.*)$" REMOTE_USER=$1
Я могу успешно выполнить единый вход.
Но проблема в том, что Apache получает переменную как iv_user.Если я установлю это таким образом в Modify Headers для Google Chrome, SSO завершится неудачно с сообщением об ошибке ser: No $ENV{REMOTE_USER} or $ENV{HTTP_REMOTE_USER} !(REMOTE_ADDR: x.x.x.x)
.так что похоже, что мой SetEnvIf не срабатывает.
Я могу пойти и добавить переменную HTTP_IV_USER
непосредственно в код OTRS следующим образом, но не думаю, что это элегантный способ справиться с этим:
Короче говоря, вот мои вопросы:
- Создает ли Apache переменную
HTTP_IV_USER
из переменной, найденной в заголовке HTTP (iv_user
) - Если да, может быть, для этого используется директива
SetEnv
? - Если да, и это мое единственное предположение, моя директива SetEnvIf не работает из-за
The SetEnv directive runs late during request processing meaning that directives such as SetEnvIf and RewriteCond will not see the variables set with it
.http://httpd.apache.org/docs/2.4/env.html#using
Я надеюсь, что моя проблема ясна и понятна, и я знаю, что есть страстные люди, которые хотят поделиться своими знаниями и опытом :)
Большое спасибозаранее и с наилучшими пожеланиями!