Как я могу реализовать использование единой точки входа (SSO) Microsoft AD для внутреннего приложения PHP?

Я не эксперт, но готов поспорить, это либо явно не разрешено, либо не определено спецификацией C99, поэтому, вероятно, лучше держаться подальше от него.

28
задан Simon East 16 July 2015 в 05:36
поделиться

5 ответов

Все, что вам нужно, это модуль 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). У вас может быть несколько записей, это список, разделенный запятыми.

18
ответ дан 28 November 2019 в 03:53
поделиться

У меня была аналогичная проблема, которую мне нужно было решить для моей организации.

Я искал возможность использовать adLDAP .

На сайте есть документация по обеспечению бесшовной аутентификации с помощью Active Directory тоже.

1
ответ дан 28 November 2019 в 03:53
поделиться

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.

0
ответ дан 28 November 2019 в 03:53
поделиться

Мне было бы интересно узнать о решении, которое использует OpenID в качестве бэкэнда (своего рода) для этого ... Я не видел ничего, что могло бы напрямую подключаться к ActiveDirectory, когда я гуглил (быстро ). Однако было бы довольно безболезненно реализовать через простой HTTP (S) (вы должны быть поставщиком OpenID, который проверяет учетные данные по вашему локальному AD). В лучшем случае вы можете просто добавить пару классов в свое приложение и работать - никаких модулей веб-сервера не требуется. Существует много открытого исходного кода по обе стороны от этого, так что, по крайней мере, стоит взглянуть. Если вы предоставите бэкэнд пользователям (т. Е. Предоставите им URL-адреса OpenID), у вас будет дополнительное преимущество, заключающееся в том, что они смогут входить в систему не только на ваши внутренние сайты, используя эти учетные данные. (Пример: переполнение стека.)

Кстати, я был бы против того, чтобы сделать так, чтобы Internet Explorer требовался. Я не уверен, что это цель, исходя из того, как вы написали вопрос, но в зависимости от вашей ИТ-среды я ожидаю, что люди, использующие Firefox или Safari (или Opera или ...), будут менее чем в восторге. (Вы не разрабатываете сначала против IE, не так ли? Каждый раз, когда я это делал, это было болезненно. ) Это не означает, что вы не можете использовать эту функцию IE, просто это не должно быть единственным вариантом. В опубликованной вами ссылке указано, что NTLM работает не только с IE, но, поскольку у меня нет опыта работы с ним, трудно судить, насколько хорошо это будет работать.

1
ответ дан 28 November 2019 в 03:53
поделиться

Один из вариантов - использовать CAS (центральную службу аутентификации).

Он имеет клиентскую библиотеку php.

Ссылка на MS Active Directory: http: //www.ja-sig.org/wiki/display/CASUM/Active+Directory

Однако вам потребуется Apache maven 2.

0
ответ дан 28 November 2019 в 03:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: