У меня есть веб-сайт PHP, работающий как приложение на IIS.
Приложение использует специальную идентификацию, которая запускает все процессы php-cgi.exe
под пользователем NetworkService
, который имеет доступ к серверу AD.
В IIS есть еще одно приложение .NET, где оно использует ту же идентификационную информацию и может входить в AD, используя класс System.Web.Security.FormsAuthentication
, и использует Forms Authentication
в настройках аутентификации в IIS.Я попытался скопировать настройки заново, но безрезультатно.
Код .NET:
...
using System.Web.Security.Membership.ValidateUser;
...
public ActionResult Login(Login model, string route)
{
if (Membership.ValidateUser(model.Username, model.Password)) {
FormsAuthentication.SetAuthCookie(model.Username);
return Redirect(route);
}
return RedirectHome();
}
Мой код, работающий на IIS с PHP CGI, олицетворение включено на уровне IIS и php.ini
уровень:
public function login()
{
$ldapHost = 'ldap://spacemudd-ad';
// PHP should use server's (iis) credentials when connecting. (impersonate)
$connection = ldap_connect($ldapHost);
// This always fails.
//
// "ldap_bind(): Unable to bind to server: Can't contact LDAP server"
//
// I believe due to the php-cgi.exe not sending the request
// to the AD server through the IdentityPool's user (NetworkService)
// even though in the TaskManager, the php-cgi.exe shows the owner is
// NetworkService?
//
$ldapBind = ldap_bind($connection);
// TODO: Search the AD directory for the user to be authenticated.
}
php.ini
конфигурация:
fastcgi.impersonate = 1
ref.вопросы:
Обновление 24-11-2018 : Системный администратор дал мне следующую информацию:
config.md:
<add name="ADConnectionString" connectionString="LDAP://spacelantern-central/DC=spacelantern,DC=com" />
<membership defaultProvider="ADMembershipProvider">
<providers>
<clear />
<add name="ADMembershipProvider" type="System.Web.Security.ActiveDirectoryMembershipProvider" connectionStringName="ADConnectionString" attributeMapUsername="sAMAccountName" />
</providers>
</membership>
code.md:
if (Membership.ValidateUser("userid", "password"))
{
//
}