Пример использования AuthType Digest для аутентификации пользователя один раз в поддоменах?

У меня есть домен, к которому будет обращаться небольшая частная группа людей. Поэтому я хочу контролировать доступ через аутентификацию.

В домене есть набор установленных приложений, каждый из которых имеет свой собственный поддомен. Например: domain.com, app1.domain.com, app2.domain.com, app3.domain.com

Мне бы хотелось иметь решение с единым входом, чтобы им не приходилось проходить аутентификацию для каждого приложения. Кроме того, приложения написаны на разных языках (PHP, Python и Perl), поэтому аутентификация пользователей через модуль Apache идеальна.

Я новичок в дайджесте аутентификации, но это похоже на хорошее решение. Я использовал htdigestдля создания своих пользователей. Я настроил свой домен и субдомены (см. Ниже).

Если я перейду к домену или любому из поддоменов, он запросит имя пользователя и пароль. Если я введу правильное имя пользователя и пароль, он будет аутентифицирован и страница загрузится. Однако, если я перейду на другой поддомен, он попросит меня снова ввести имя пользователя и пароль. Если я введу одно и то же имя пользователя и пароль, оно будет работать.

Таким образом, файл паролей в порядке, и аутентификация в порядке, но, похоже, проблема заключается в конфигурации AuthDigestDomain.

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

Я надеюсь, что кто-то здесь может помочь. Я помещаю ту же самую информацию аутентификации в каждом Directory? Должен ли я использовать Directoryили Locationили Files? Я что-то пропустил все вместе?

Заранее спасибо!

Ниже приведен пример моей конфигурации Apache для domain.com:

<Directory /var/www>
  AuthType Digest
  AuthName "realm"
  AuthDigestAlgorithm MD5
  AuthDigestDomain / http://domain.com/ http://app1.domain.com/ http://app2.domain.com/ http://app3.domain.com/
  AuthDigestNcCheck Off
  AuthDigestNonceLifetime 0
  AuthDigestQop auth
  AuthDigestProvider file
  AuthUserFile /etc/apache2/.htpasswd-digest
  AuthGroupFile /dev/null
  Require valid-user
</Directory>

И вот пример app1.domain.com:

<Directory /var/lib/app1>
  AuthType Digest
  AuthName "realm"
  AuthDigestAlgorithm MD5
  AuthDigestDomain / http://domain.com/ http://app1.domain.com/ http://app2.domain.com/ http://app3.domain.com/
  AuthDigestNcCheck Off
  AuthDigestNonceLifetime 0
  AuthDigestQop auth
  AuthDigestProvider file
  AuthUserFile /etc/apache2/.htpasswd-digest
  AuthGroupFile /dev/null
  Require valid-user
</Directory>

Чтобы еще больше сбить с толку, это работает при использовании IE6, но не Firefox или Chrome. Это клиенты не отправляют аутентификацию должным образом, или сервер не отправляет правильные учетные данные?

Я также читал RFC 2617 и написал заголовки аутентификации, используя PHP, чтобы убедиться, что запрос / ответ корректен. Это не помогло вообще!

10.12.2008 23:09:35
3 ОТВЕТА
РЕШЕНИЕ

Большинство браузеров не соблюдают директиву «домен» дайджеста и не будут повторно отправлять учетные данные для других URI. Насколько я знаю, Opera - единственный браузер, который чтит это.

Для Opera сервер (ы) должен отвечать одинаковой строкой «realm» для каждого URI в списке доменов. Другими словами, если domain = "/ test / example", сервер должен отправить «Test Realm - example.com» в заголовке WWW-Authenticate для обоих этих URI. Я предполагаю, что Opera делает это, потому что она хранит H (A1) вместо фактического пароля для безопасности. Читайте в RFC2617 для получения дополнительной информации об этом.

Вот мое кросс-браузерное решение этой проблемы: http://travisce.com/arest/

3
30.12.2009 04:20:58
Спасибо Тревис. Это наиболее подходящее решение моей проблемы, поэтому вы получите Принятый ответ. Еще раз спасибо.
user43040 5.02.2010 06:29:08

У меня нет опыта с чем-то подобным. Но я просто взглянул на документацию Apache и нашел это:

Директива AuthDigestNonceLifetime контролирует срок действия одноразового номера сервера. [...] Если секунд меньше 0, то время одноразового номера никогда не истекает.

Поэтому мне кажется, что 0 секунд (значение, которое вы используете) либо недопустимы, либо действительно указывают Apache, что срок действия одноразового номера истекает через 0 секунд, что в точности объясняет поведение, которое вы получаете.

0
13.12.2008 12:56:33
Спасибо за ответ Манни. Я проверил это с AuthDigestNonceLifetime 300, 0, -1 и с закомментированным объявлением. Я получаю одинаковый результат для каждого случая.
user43040 14.12.2008 23:39:25

Может ли подстановочный знак в AuthDigestDomain помочь?

    * .domain.com
0
22.06.2009 07:14:20
Спасибо за предложение. Я пробовал это безрезультатно. Я больше не ищу ответ на этот вопрос. Я полностью отказался от этой идеи. Тем не менее, я буду держать вопрос открытым в надежде, что кто-то может решить его, и это поможет другим. Спасибо.
user43040 13.07.2009 05:10:29