Общие сведения о безопасности ASP.NET

В этой статье приведены общие сведения о безопасности ASP.NET. В ней рассматриваются следующие пространства имен библиотеки классов Microsoft платформа .NET Framework:

  • System.Web.Security
  • System.Web.Principal

Исходная версия продукта: ASP.NET
Оригинальный номер базы знаний: 306590

Сводка

ASP.NET обеспечивает больший контроль над реализацией безопасности приложения. ASP.NET безопасность работает в сочетании с безопасностью СЛУЖБ IIS и включает в себя службы проверки подлинности и авторизации для реализации модели безопасности ASP.NET. ASP.NET также включает функцию безопасности на основе ролей, которую можно реализовать как для учетных записей пользователей Windows, так и для учетных записей пользователей, отличных от Windows.

Эта статья состоит из следующих разделов:

Поток безопасности с запросом

Ниже описана последовательность событий, когда клиент выполняет запрос.

  1. Клиент запрашивает страницу .aspx, которая находится на сервере IIS.
  2. Учетные данные клиента передаются в СЛУЖБЫ IIS.
  3. IIS выполняет проверку подлинности клиента и перенаправит маркер проверки подлинности вместе с запросом клиента в рабочий процесс ASP.NET.
  4. На основе маркера, прошедшего проверку подлинности из IIS, и параметров конфигурации веб-приложения, ASP.NET решает, следует ли олицетворять пользователя в потоке, обрабатывающем запрос. В разных различиях между активными страницами сервера (ASP) и ASP.NET ASP.NET больше не олицетворяет пользователя, прошедшего проверку подлинности, по умолчанию. Чтобы включить олицетворение, необходимо задать для атрибута олицетворения раздела identity в файле Web.config значение true.

Дополнительные сведения о потоке безопасности см. в разделе ASP.NET Поток данных.

Дополнительные сведения о олицетворении в ASP.NET см . в статье Реализация олицетворения в приложении ASP.NET.

СЛУЖБЫ IIS поддерживают параметры конфигурации, связанные с безопасностью, в метабазе IIS. Однако ASP.NET поддерживает параметры конфигурации безопасности (и другие) в xml-файлах конфигурации. Хотя это обычно упрощает развертывание приложения с точки зрения безопасности, модель безопасности, которую использует приложение, требует правильной настройки метабазы IIS и приложения ASP.NET с помощью файла конфигурации (Web.config).

Следующие разделы конфигурации связаны с безопасностью ASP.NET:

Проверка подлинности

Проверка подлинности — это процесс, с помощью которого вы получаете учетные данные идентификации, такие как имя и пароль пользователя, и проверяете эти учетные данные в отношении определенного центра.

ASP.NET предоставляет четыре поставщика проверки подлинности:

проверка подлинности с помощью форм;

Проверка подлинности с помощью форм относится к системе, в которой запросы без проверки подлинности перенаправляются в форму HTML, в которой пользователи вводят свои учетные данные. После того как пользователь предоставит учетные данные и отправит форму, приложение проверит запрос, а система выдает билет авторизации в виде файла cookie. Этот файл cookie содержит учетные данные или ключ для повторного получения удостоверения. Последующие запросы из браузера автоматически включают файл cookie.

Дополнительные сведения о проверке подлинности с помощью форм см. в разделе Поставщик проверки подлинности форм.

Дополнительные сведения о проверке подлинности с помощью форм в ASP.NET см. в статье Реализация проверки подлинности Forms-Based в приложении ASP.NET с помощью C#.NET.

Проверка подлинности Windows

В проверка подлинности Windows служба IIS выполняет проверку подлинности, и маркер, прошедший проверку подлинности, перенаправлен в рабочий процесс ASP.NET. Преимущество использования проверка подлинности Windows заключается в том, что для него требуется минимальное кодирование. Вы можете использовать проверка подлинности Windows для олицетворения учетной записи пользователя Windows, которую iis проверяет подлинность, прежде чем передавать запрос на ASP.NET.

Дополнительные сведения о проверка подлинности Windows см. в разделе Поставщик WindowsAuthenticationModule.

Проверка подлинности passport

Проверка подлинности Passport — это централизованная служба проверки подлинности, которая предоставляется корпорацией Майкрософт, которая предлагает единый вход и основные службы профилей для сайтов-участников. Как правило, проверка подлинности Passport используется, когда требуется возможность единого входа в нескольких доменах.

Дополнительные сведения о проверке подлинности Passport см. в разделе Поставщик проверки подлинности passport.

Проверка подлинности по умолчанию

Проверка подлинности по умолчанию используется, если вам не нужна какая-либо безопасность в веб-приложении; для этого поставщика безопасности требуется анонимный доступ. Среди всех поставщиков проверки подлинности проверка подлинности по умолчанию обеспечивает максимальную производительность приложения. Этот поставщик проверки подлинности также используется при использовании собственного пользовательского модуля безопасности.

Авторизация

Авторизация — это процесс, который проверяет, имеет ли пользователь доступ к запрошенным ресурсам.

ASP.NET предлагает следующие поставщики авторизации:

Авторизация файла

Класс FileAuthorizationModule выполняет авторизацию файла и активен при использовании проверка подлинности Windows. FileAuthorizationModuleотвечает за выполнение проверок windows контроль доступа Списки (ACL), чтобы определить, должен ли пользователь иметь доступ.

Авторизация URL-адреса

Класс UrlAuthorizationModule выполняет авторизацию URL-адреса, которая управляет авторизацией на основе пространства имен универсального идентификатора ресурса (URI). Пространства имен URI могут отличаться от физических папок и путей к файлам, используемых разрешениями NTFS.

UrlAuthorizationModule реализует как положительные, так и отрицательные утверждения авторизации; то есть модуль можно использовать для выборочного разрешения или запрета доступа к произвольным частям пространства имен URI для пользователей, ролей (таких как менеджер, тестировщики и администраторы) и команд (например GET , и POST).

Дополнительные сведения об авторизации в ASP.NET см. в разделе Авторизация ASP.NET.

Безопасность на основе ролей

Безопасность на основе ролей в ASP.NET аналогична безопасности на основе ролей, которую используют Microsoft COM+ и Microsoft Transaction Server (MTS), хотя существуют важные различия. Безопасность на основе ролей в ASP.NET не ограничивается учетными записями и группами Windows. Например, если проверка подлинности Windows и олицетворение включены, удостоверение пользователя является удостоверением Windows (User.Identity.Name = "Domain\username"). Вы можете проверка удостоверения для членства в определенных ролях и соответствующим образом ограничить доступ. Например:

Visual Basic .NET code

If User.IsInRole("BUILTIN\Administrators") Then
    Response.Write("You are an Admin")
Else If User.IsInRole("BUILTIN\Users") then
    Response.Write("You are a User")
Else
    Response.Write("Invalid user")
End if

Visual C# .NET code

if ( User.IsInRole("BUILTIN\\Administrators"))
    Response.Write("You are an Admin");
else if (User.IsInRole("BUILTIN\\Users"))
    Response.Write("You are a User");
else
    Response.Write("Invalid user");

При использовании проверки подлинности с помощью форм роли не назначаются пользователю, прошедшему проверку подлинности; Это необходимо сделать программным способом. Чтобы назначить роли пользователю, прошедшему проверку подлинности, используйте OnAuthenticate событие модуля проверки подлинности (который является модулем проверки подлинности с помощью форм в этом примере), чтобы создать новый GenericPrincipal объект и назначить его свойству HttpContextUser объекта . Это иллюстрирует следующий код:

Visual Basic .NET code

Public Sub Application_AuthenticateRequest(s As Object, e As EventArgs)
    If (Not(HttpContext.Current.User Is Nothing)) Then
        If HttpContext.Current.User.Identity.AuthenticationType = "Forms" Then
            Dim id as System.Web.Security.FormsIdentity = HttpContext.Current.User.Identity
            Dim myRoles(3) As String
            myRoles(0)= "managers"
            myRoles(1)= "testers"
            myRoles(2)= "developers"
            HttpContext.Current.User = new System.Security.Principal.GenericPrincipal(id,myRoles)
        End If
    End If
End Sub

Visual C# .NET code

public void Application_AuthenticateRequest(Object s, EventArgs e)
{
    if (HttpContext.Current.User != null)
     {
         if (HttpContext.Current.User.Identity.AuthenticationType == "Forms" )
         {
             System.Web.Security.FormsIdentity id = HttpContext.Current.User.Identity;
             String[] myRoles = new String[3];
             myRoles[0]= "managers";
             myRoles[1]= "testers";
             myRoles[2]= "developers";
             HttpContext.Current.User = new System.Security.Principal.GenericPrincipal(id,myRoles);
         }
    }
}

Чтобы проверка, находится ли пользователь в определенной роли и соответствующим образом ограничить доступ, используйте следующий код (или аналогичный) на страницах .aspx:

Visual Basic .NET code

If User.IsInRole("managers") Then
    Response.Write("You are a Manager")
Else If User.IsInRole("testers") Then
    Response.Write("You are a Tester")
Else If User.IsInRole("developers") Then
    Response.Write("You are a Developer")
End if

Visual C# .NET code

if (User.IsInRole("managers"))
    Response.Write("You are a Manager");
else if (User.IsInRole("testers"))
    Response.Write("You are a Tester");
else if (User.IsInRole("developers"))
    Response.Write("You are a Developer");

Дополнительные сведения о безопасности на основе ролей см. в разделе Безопасность на основе ролей.

Ссылки

Дополнительные общие сведения о ASP.NET см. в следующей группе новостей:

группа новостей ASP.NET

Дополнительные сведения см. в следующих статьях или книгах: