Справочная информация:ASP.NET MVC 5: пул приложений, аутентификация Windows и Active Directory
У меня есть приложение MVC 5/C#, которое взаимодействует с внешним API. Он использует Active Directory
пользователей 'Principal Context
для авторизации. Приложение проверяет, имеет ли UserPrincipal.Current
комбо Un/Pw, хранящееся в Db, которое будет использоваться для любых операций позже внешнего API.
public bool IsUserSetup()
{
try
{
// find currently logged in user
var user = UserPrincipal.Current; // <- ERRS HERE -----
// check if this user exists in Db with creds
if (user != null)
{
var u = _userProfileRepository.GetUserProfileByUserSID(user.Sid.ToString());
if (u != null
&& !string.IsNullOrEmpty(u.RallyUsername)
&& !string.IsNullOrEmpty(u.RallyPassword)
&& u.IsActive // <-- make sure this person is an active user
)
{
return true;
}
}
}
catch (Exception ex)
{
string exMessage = ex.Message;
//throw ex;
}
return false;
}
- Я понимаю, что
UserPrincipal.Current
будет возвращать идентификатор пула приложений в по умолчанию. - Я также понимаю, установка IMPERSONATE Истинных IIS будет использовать контекст текущего пользователя, как в:
<system.web> <identity impersonate="true"/>...
Однако, если я перехожу олицетворения на (правда), то я получаю это:
An ASP.NET setting has been detected that does not apply in Integrated managed pipeline mode.
Итак, я изменю app pool
использовать «классический» (который я не думаю, что это ответ или путь, который я должен взять), и я получаю эту ошибку:
The page you are requesting cannot be served because of the ISAPI and CGI Restriction list settings on the Web server.
Очевидно, что это отлично работает в IIS Express, он видит меня (домен \ имя пользователя) просто отлично. Но когда я переключаю его на IIS или развертываю на реальном веб-сервере, я получаю эти проблемы.
Мне нужно получить текущего пользователя/принципала, чтобы я мог хранить их SID и учетные данные во внешнем API в Db. Затем, используя сайт/приложение, он автоматически использует магические средства для работы в API по мере необходимости.
Что мне нужно сделать, чтобы либо:
- установки IIS, чтобы олицетворения работать
- настроить свой код, чтобы сделать то же самое
ОК, что привело меня к одному конкретному камню преткновения, но это не весь ответ , Как получить текущего пользователя в среде домена AD? –
Вы можете использовать HttpContext.User.Identity –
Нет, я не могу. Если вы имеете в виду System.Web.HttpContext.Current.User.Identity.Name, которое по-прежнему отображается как пустая строка ... Это не должно быть так сложно. –