Книга: C# для профессионалов. Том II

Принципал Windows

Принципал Windows

Создадим консольное приложение, предоставляющее доступ к принципалу в приложении. в котором мы хотим пользоваться описанной ниже учетной записью Windows. Нам необходимы пространства имен System.Security.Principal и System.Threading. Прежде всего нужно задать, что мы хотим, чтобы .NET автоматически соединял принципал с описанной ниже учетной записью Windows, так как в .NET это не происходит автоматически по соображениям безопасности. Наше задание:

using System;
using System.Security.Principal;
using System.Security.Permissions;
using System.Threading;
namespace SecurityApplication2 {
 class Class1 {
  static void Main(string[] args) {
   AppDomain.CurrentDomain.SetPrincipalPolicy(
    PrincipalPolicy.WindowsPrincipal);

Можно использовать метод WindowsIdentity.GetCurrent() для доступа к данным учетной записи Windows, однако такой способ подходит, когда необходимо взглянуть на принципал один раз. Если необходимо обратиться к принципалу несколько раз, то более эффективно задать политику так, чтобы текущий поток выполнения предоставлял доступ к принципалу. При использовании метода SetPrincipalPolicy определяется, что принципал в текущем потоке выполнения должен поддерживать объект WindowsIdentity. Добавим код для доступа к свойствам принципала из объекта Thread:

   WindowsPrincipal principal =
   (WindowsPrincipal)Thread.CurrentPrincipal;
   WindowsIdentity identity = (WindowsIdentity)principal.Identity;
   Console.WriteLine("IdentityTyрe:" + identity.ToString());
   Console.WriteLine("Name:" + identity.Name);
   Console.WriteLine(
    "Users'?:" + principal.IsInRole("BUILTINUsers"));
   Console.WriteLine(
    "Administrators' ?: " +
    principal.IsInRole(WindowsBuiltInRole.Administrator));
   Console.WriteLine("Authenticated:" + identity.IsAuthenticated);
   Console.WriteLine("AuthType:" + identity.AuthenticationType);
   Console.WriteLine("Anonymous?:" + identity.IsAnonymous);
   Console.WriteLine("Token:" + identity.Token);
  }
 }
}

Вывод из этого консольного приложения будет выглядеть похожим на следующий, в зависимости от конфигурации машины и ролей, ассоциированных с учетной записью, под которой вы зарегистрировались в системе:

IdentityType:System.Security.Principal.WindowsIdentity
Name:MACHINEalaric
'Users'?:True
'Administrators'?:True
Authenticated:True
AuthType:NTLM
Anonymous?:False
Token:256

Очевидно, что крайне полезно иметь возможность получить так легко доступ к данным о текущем пользователе и его ролях, чтобы с помощью этой информации решать, какие действия выполнить и какие отменить. Роли и группы пользователей Windows предоставляют администраторам дополнительную возможность использовать стандартные утилиты администрирования пользователей, и обычно можно избежать изменения кода, когда изменяются роли пользователя. Рассмотрим роли более подробно.

Оглавление книги


Генерация: 2.339. Запросов К БД/Cache: 3 / 0
поделиться
Вверх Вниз