Иллюстрированный самоучитель по Architecture .NET

Защита .NET на основе ролей. Принципалы и личности.

Объект личности выполняет реализацию интерфейса I Identity. У этого интерфейса имеется три свойства:

  • Name (имя) – строка, относящаяся к личности. Общеязыковая среда выполнения CLR получает его от операционной системы или от средства доступа, используемого для опознавания. Таким средством доступа может быть, например, ASP.NET;
  • IsAuthenticated – логическое значение, указывающее, был ли пользователь опознан;
  • AuthenticationType – строка, которая указывает, какое опознавание использовалось операционной системой или средством доступа. Типами опознавания являются, например, Basic (Основной), NTLM, Kerberos (Цербер), Forms (Формы) или Passport (Паспорт).

Есть несколько типов объектов личности. Поскольку это Windows-программа, то имеется объект Windowsldentity, связанный с WindowsPrincipal. Вот пример, при выполнении которого распечатывается информация о свойствах объекта личности. На печать выводятся имя пользователя текущего потока и тип используемого опознавания.

Ildentity *ii = ip › Identity; Console::WriteLine(
"Thread::CurrentPrincipal Name: {0} Type: {1}
I/ Поток:: Имя {0} Тип: {1}
IsAuthenticated: {2}", ii › Name,
// Имя ii › AuthenticationType, _box(ii › IsAuthenticated));

Вот что распечатывается на моей машине:

Thread::CurrentPrincipal Name: HPDESKTOPXAdministrator
Type: NTLM IsAuthenticated: True

Перевод такой:

Имя Поток::CurrentPrincipal: HPDESKTOPXAdministrator
Тип: NTLM IsAuthenticated: Истина

Подстановка имени вашей машины в примерах

В нескольких примерах используется такое имя машины, как HPDESKTOP. Запуская примеры на своем компьютере, вы можете подставлять имя соответствующей машины или соответствующего домена.

Работающая на машине операционная система использовала для опознавания протокол NTLM. Пользователь, запустивший программу, был опознан как "Administrator" ("Администратор"). Затем программа проверяет, действительно ли он является объектом Windows Identity. В этом объекте есть и другие свойства и методы, а не только те, что находятся в интерфейсе Identity. Одним из членов Windows Identity является идентификатор лексемы учетной записи для Win32. Это идентификатор пользователя выполняемого потока.

// получить информацию от личности из WindowsPrincipal WindowsIdentity *wi =
dynamic_cast<WindowsIdentity *>(wp › Identity); if (wi! = OY
Console::WriteLine(
"WindowsPrincipal Identity Name: {0} Type: {1}
Authenticated: {2} Token: {3}",
// Опознан: {2} Лексема: {3} ",
wi › Name, // Имя
wi › AuthenticationType,
_box(wi › IsAuthenticated),
_box(wi › Token)); // Лексема

Зная имя пользователя, можно решать программным путем, есть ли у пользователя право производить некоторые операции, не выполняя при этом те или иные ветви кода. (Иначе говоря, зная имя пользователя, можно определить полномочия.) Это показано в примере RoleBasedSecurity с помощью оператора условного перехода if-else.

// имя пользователя используется для разрешения
// выполнения ветви кода
String * name = wp › Identity › Name; // Строка – Имя
if (name › Equals("HPDESKTOP\\Administrator"))
// если (имя › Равняется ("HPDESKTOP \\ Администратор"))
{
Console::WriteLine(
"Name matches HPDESKTOP\\Administrator");
// "Имя равно HPDESKTOP \\ Администратор"
// разрешить выполнение ветви кода, которая идет сюда…
}
else
{
Console::WriteLine(
"Name does not match HPDESKTOP\\Administrator");
// "Имя не равно HPDESKTOP \\ Администратор"
// не разрешить выполнение ветви кода, которая идет сюда…
}

Далее в примере RoleBasedSecurity показано, как можно выполнять некоторые действия в зависимости от членства в роли, которая определена пользователем или является встроенной, такой, например, как Administrator (Администратор), Guest (Гость) и User (Пользователь).

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.