Общие сведения о безопасности 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.
Эта статья состоит из следующих разделов:
- Поток безопасности с запросом
- Связанные параметры конфигурации
- Проверка подлинности
- Авторизация
- Безопасность на основе ролей
Поток безопасности с запросом
Ниже описана последовательность событий, когда клиент выполняет запрос.
- Клиент запрашивает страницу .aspx, которая находится на сервере IIS.
- Учетные данные клиента передаются в СЛУЖБЫ IIS.
- IIS выполняет проверку подлинности клиента и перенаправит маркер проверки подлинности вместе с запросом клиента в рабочий процесс ASP.NET.
- На основе маркера, прошедшего проверку подлинности из 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 предоставляет четыре поставщика проверки подлинности:
- проверка подлинности с помощью форм;
- Проверка подлинности Windows
- Проверка подлинности passport
- Проверка подлинности по умолчанию
проверка подлинности с помощью форм;
Проверка подлинности с помощью форм относится к системе, в которой запросы без проверки подлинности перенаправляются в форму 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
объект и назначить его свойству HttpContext
User объекта . Это иллюстрирует следующий код:
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 см. в следующей группе новостей:
Дополнительные сведения см. в следующих статьях или книгах:
PRB: Request.ServerVariables("LOGON_USER") возвращает пустую строку в ASP.NET
Рейли, Дуглас J. Проектирование приложений Microsoft ASP.NET. Microsoft Press, 2001.
Эспозито, Дино. Создание веб-решений с помощью ASP.NET и ADO.NET. Microsoft Press, 2001.
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по