У меня есть небольшой веб-сервер, на котором запущен ASP.NET MVC. Сервер работает с пользователем «abc», но у пользователя «abc» нет прав на «изменения» в ActiveDirectory.
Поэтому мне нужно передать логин пользователя в PrincipalContext с помощью.
using (PrincipalContext context = new PrincipalContext(ContextType.Domain, null, user, password))
{
GroupPrincipal theGroup = GroupPrincipal.FindByIdentity(context, groupId);
theGroup.Members.Add(context, IdentityType.SamAccountName, userId);
theGroup.Save();
}
Код действительно работает. Но мне не нравится переводить пароль с метода на метод ... => на MVC у меня есть SSO, и сервер меня знает
System.Web.HttpContext.Current.User.Identity
Можно ли использовать эту информацию?
new PrincipalContext(ContextType.Domain, null, [System.Web.HttpContext.Current.User]) ???
ЛИБО Я ДОЛЖЕН дать пароль. И как лучше перейти от зрения к этому методу.
Благодарность





Это называется «олицетворением». Пока вы используете аутентификацию Windows, вы можете сделать это с помощью метода WindowsIdentity.Impersonate():
using (var ctx = ((WindowsIdentity) HttpContext.Current.User.Identity).Impersonate()) {
// Anything done here will use the user's credentials
using (var context = new PrincipalContext(ContextType.Domain)) {
...
}
}
Вы создаете PrincipalContext внутри using?
А вы удалили user, password из конструктора PrincipalContext?
это решение не работает с PrincipalContext !? Думаю, я что-то не так делаю. если я передам пароль напрямую, можно будет добавлять пользователей ... обратный вызов с WindowsIdentity: «Доступ запрещен»