Вы можете установить Идентичность потока, создав новый Принципал. Вы можете использовать любой идентификатор, который наследуется от System.Security.Principal.IIdentity , но вам нужен класс, который наследуется от System.Security.Principal.IPrincipal , который принимает тип идентификатора .
Для простоты .NET Framework предоставляет классы GenericPrincipal и GenericIdentity , которые можно использовать следующим образом:
using System.Security.Principal;
// ...
GenericIdentity identity = new GenericIdentity("M.Brown");
identity.IsAuthenticated = true;
// ...
System.Threading.Thread.CurrentPrincipal =
new GenericPrincipal(
identity,
new string[] { "Role1", "Roll2" }
);
//...
if (!System.Threading.Thread.CurrentPrincipal.IsInRole("Roll1"))
{
Console.WriteLine("Permission denied");
return;
}
Однако это не даст вам права Windows на вещи, использующие новую личность. Но это может быть полезно, если вы разрабатываете веб-сайт и хотите создать собственное управление пользователями.
Если вы хотите притвориться другим пользователем Windows, а не той учетной записью, которую вы используете в данный момент, вам необходимо использовать олицетворение. Пример того, как это сделать, можно найти в справке для System.Security.Principal.WindowsIdentity.Impersonate () . Существуют ограничения в отношении того, под какими учетными записями может работать ваша учетная запись.
В некоторых случаях .Net framework делает вас подражанием. Один из примеров того, как это происходит, - если вы разрабатываете веб-сайт ASP.Net и у вас включена встроенная проверка подлинности Windows для виртуального каталога или сайта, на котором вы работаете.