// Определить необходимые переменные.
string user = "matthew";
string password ="secret";
string machine = "FARIAMAT";
int returnedToken;

// Попытаться зарегистрироваться.
if (LogonUser(user, machine, password, 3, 0, out returnedToken))
{
  // Попытка удалась, получим маркер.
  IntPtr token = new IntPtr(returnedToken);
}

Обратите внимание, что целочисленное значение, возвращенное LogonUser(), необходимо преобразовать в IntPtr, чтобы использовать его вместе с методом WindowsIdentity.Impersonate().

Выполнение заимствования прав

Получив маркер учетной записи, вы можете применить метод WindowsIdentity.Impersonate() для запуска заимствования прав соответствующей личности. Этот метод вы можете использовать двумя способами. Можно вызвать статическую версию, принимающую маркер учетной записи. Альтернативно можно использовать версию экземпляра, которая заимствует личность, представленную соответствующим объектом WindowsIdentity. В обоих случаях метод Impersonate() возвращает объект WindowsImpersonationContext, который имеет единственное назначение — вернуть исходную личность вызовом метода Undo().

Рассмотрим простейший пример программного заимствования прав с использованием статической версии метода Impersonate():

WindowsImpersonationContext impersonateContext;
impersonateContext = WindowsIdentity.Impersonate(token);
// (Здесь выполняются задачи от имени заимствованного ID.
//  Этот код не сможет выполнить никаких задач,
//  которые не разрешены данному пользователю.)
impersonateContext.Undo();

В любой момент вы можете определить личность, от имени которой ваш код в данный момент выполняется, вызвав метод WindowsIdentity.GetCurrent(), Ниже приведена функция, применяющая эту технику для определения текущей личности и отображения имени пользователя на Web-странице:

private void DisplayIdentity()
{
  // Получить идентичность пользователя, от имени которого
  // выполняется текущий код.
  WindowsIdentity identity = WindowsIdentity.GetCurrent();
  lblInfo.Text += "Executing as: " + identity.Name + "<br>";
}

предыдущая    следующая страница    вначало главы    оглавление

923

Hosted by uCoz