Я не эксперт, но готов поспорить, это либо явно не разрешено, либо не определено спецификацией C99, поэтому, вероятно, лучше держаться подальше от него.
Все, что вам нужно, это модуль Apache mod_auth_sspi
.
Пример конфигурации:
AuthType SSPI
SSPIAuth On
SSPIAuthoritative On
SSPIDomain mydomain
# Set this if you want to allow access with clients that do not support NTLM, or via proxy from outside. Don't forget to require SSL in this case!
SSPIOfferBasic On
# Set this if you have only one domain and don't want the MYDOMAIN\ prefix on each user name
SSPIOmitDomain On
# AD user names are case-insensitive, so use this for normalization if your application's user names are case-sensitive
SSPIUsernameCase Lower
AuthName "Some text to prompt for domain credentials"
Require valid-user
И не забывайте, что вы также можете использовать Firefox для прозрачного единого входа в домене Windows : просто перейдите на about: config
, выполните поиск network.automatic-ntlm-auth.trusted-uris
и введите имя хоста или полное доменное имя вашего внутреннего приложения (например, myserver или myserver.corp.domain.com). У вас может быть несколько записей, это список, разделенный запятыми.
У меня была аналогичная проблема, которую мне нужно было решить для моей организации.
Я искал возможность использовать adLDAP .
На сайте есть документация по обеспечению бесшовной аутентификации с помощью Active Directory тоже.
For IIS/PHP FCGI, You need to send out an unauthorized header:
function EnableAuthentication()
{
$realm = "yoursite";
header('WWW-Authenticate: Digest realm="'.$realm.'",qop="auth",nonce="'.uniqid().'",opaque="'.md5($realm).'"');
header("HTTP/1.1 401 Unauthorized");
exit;
}
You can then get at the username with:
$winuser = $_SERVER["REMOTE_USER"];
I then make sure the $winuser is in my database of allowed users.
Be SURE and test this under a non-privileged account. When I first installed this I tested it and it worked fine, but later when a standard non-server-admin user tried it this failed. Turns out some of the temporary directories need to have permissions changed for guest users. I can't recall the exact settings.
Мне было бы интересно узнать о решении, которое использует OpenID в качестве бэкэнда (своего рода) для этого ... Я не видел ничего, что могло бы напрямую подключаться к ActiveDirectory, когда я гуглил (быстро ). Однако было бы довольно безболезненно реализовать через простой HTTP (S) (вы должны быть поставщиком OpenID, который проверяет учетные данные по вашему локальному AD). В лучшем случае вы можете просто добавить пару классов в свое приложение и работать - никаких модулей веб-сервера не требуется. Существует много открытого исходного кода по обе стороны от этого, так что, по крайней мере, стоит взглянуть. Если вы предоставите бэкэнд пользователям (т. Е. Предоставите им URL-адреса OpenID), у вас будет дополнительное преимущество, заключающееся в том, что они смогут входить в систему не только на ваши внутренние сайты, используя эти учетные данные. (Пример: переполнение стека.)
Кстати, я был бы против того, чтобы сделать так, чтобы Internet Explorer требовался. Я не уверен, что это цель, исходя из того, как вы написали вопрос, но в зависимости от вашей ИТ-среды я ожидаю, что люди, использующие Firefox или Safari (или Opera или ...), будут менее чем в восторге. (Вы не разрабатываете сначала против IE, не так ли? Каждый раз, когда я это делал, это было болезненно. ) Это не означает, что вы не можете использовать эту функцию IE, просто это не должно быть единственным вариантом. В опубликованной вами ссылке указано, что NTLM работает не только с IE, но, поскольку у меня нет опыта работы с ним, трудно судить, насколько хорошо это будет работать.
Один из вариантов - использовать CAS (центральную службу аутентификации).
Он имеет клиентскую библиотеку php.
Ссылка на MS Active Directory: http: //www.ja-sig.org/wiki/display/CASUM/Active+Directory
Однако вам потребуется Apache maven 2.