ASP.NET 보안 개요

이 문서에서는 다음과 같은 Microsoft .NET Framework 클래스 라이브러리 네임스페이스를 참조하는 ASP.NET 보안을 소개합니다.

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

원래 제품 버전: ASP.NET
원본 KB 번호: 306590

요약

ASP.NET 애플리케이션에 대한 보안을 구현하기 위한 더 많은 제어를 제공합니다. ASP.NET 보안은 IIS(인터넷 정보 서비스) 보안과 함께 작동하며 ASP.NET 보안 모델을 구현하기 위한 인증 및 권한 부여 서비스를 포함합니다. ASP.NET Windows 및 비 Windows 사용자 계정에 대해 구현할 수 있는 역할 기반 보안 기능도 포함되어 있습니다.

이 문서는 다음 섹션으로 나뉩니다.

요청이 있는 보안 흐름

다음 단계에서는 클라이언트가 요청할 때의 이벤트 시퀀스를 간략하게 설명합니다.

  1. 클라이언트는 IIS 서버에 있는 .aspx 페이지를 요청합니다.
  2. 클라이언트의 자격 증명은 IIS에 전달됩니다.
  3. IIS는 클라이언트를 인증하고 클라이언트의 요청과 함께 인증된 토큰을 ASP.NET 작업자 프로세스에 전달합니다.
  4. IIS의 인증된 토큰 및 웹 애플리케이션에 대한 구성 설정에 따라 ASP.NET 요청을 처리하는 스레드에서 사용자를 가장할지 여부를 결정합니다. ASP(Active Server Pages)와 ASP.NET 간의 고유한 차이점에서 ASP.NET 더 이상 인증된 사용자를 기본적으로 가장하지 않습니다. 가장을 사용하려면 Web.config 파일에서 ID 섹션의 가장 특성을 true로 설정해야 합니다.

보안 흐름에 대한 자세한 내용은 ASP.NET Data Flow 참조하세요.

ASP.NET 가장에 대한 자세한 내용은 ASP.NET 애플리케이션에서 가장을 구현하는 방법을 참조하세요.

IIS는 IIS 메타베이스에서 보안 관련 구성 설정을 유지 관리합니다. 그러나 ASP.NET XML(Extensible Markup Language) 구성 파일에서 보안 및 기타 구성 설정을 유지 관리합니다. 이는 일반적으로 보안 관점에서 애플리케이션의 배포를 간소화하지만 애플리케이션이 채택하는 보안 모델은 구성 파일(Web.config)을 통해 IIS 메타베이스와 ASP.NET 애플리케이션의 올바른 구성이 필요합니다.

다음 구성 섹션은 ASP.NET 보안과 관련이 있습니다.

인증

인증은 사용자의 이름 및 암호와 같은 식별 자격 증명을 가져오고 일부 권한에 대해 해당 자격 증명의 유효성을 검사하는 프로세스입니다.

ASP.NET 4개의 인증 공급자를 제공합니다.

폼 인증

양식 인증은 인증되지 않은 요청이 사용자가 자격 증명을 입력하는 HTML(Hypertext Markup Language) 양식으로 리디렉션되는 시스템을 나타냅니다. 사용자가 자격 증명을 제공하고 양식을 제출하면 애플리케이션이 요청을 인증하고 시스템에서 쿠키 형식으로 권한 부여 티켓을 발급합니다. 이 쿠키에는 ID를 다시 가져오기 위한 자격 증명 또는 키가 포함되어 있습니다. 브라우저의 후속 요청에는 쿠키가 자동으로 포함됩니다.

Forms 인증에 대한 자세한 내용은 양식 인증 공급자를 참조하세요.

ASP.NET 양식 인증에 대한 자세한 내용은 C#.NET을 사용하여 ASP.NET 애플리케이션에서 Forms-Based 인증을 구현하는 방법을 참조하세요.

Windows 인증

Windows 인증 IIS는 인증을 수행하고 인증된 토큰은 ASP.NET 작업자 프로세스로 전달됩니다. Windows 인증 사용하는 이점은 최소한의 코딩이 필요하다는 것입니다. ASP.NET 요청을 전달하기 전에 Windows 인증 사용하여 IIS가 인증하는 Windows 사용자 계정을 가장하는 것이 좋습니다.

Windows 인증 대한 자세한 내용은 WindowsAuthenticationModule 공급자를 참조하세요.

Passport 인증

Passport 인증은 Microsoft에서 제공하는 중앙 집중식 인증 서비스로, 멤버 사이트에 대한 단일 로그인 및 핵심 프로필 서비스를 제공합니다. 일반적으로 Passport 인증은 여러 도메인에서 Single Sign-In 기능이 필요한 경우에 사용됩니다.

Passport 인증에 대한 자세한 내용은 Passport 인증 공급자를 참조하세요.

기본 인증

기본 인증은 웹 애플리케이션에서 보안을 원하지 않는 경우에 사용됩니다. 이 보안 공급자에는 익명 액세스가 필요합니다. 모든 인증 공급자 중에서 기본 인증은 애플리케이션에 대한 최대 성능을 제공합니다. 이 인증 공급자는 사용자 고유의 사용자 지정 보안 모듈을 사용하는 경우에도 사용됩니다.

권한 부여

권한 부여는 인증된 사용자가 요청된 리소스에 액세스할 수 있는지 확인하는 프로세스입니다.

ASP.NET 다음과 같은 권한 부여 공급자를 제공합니다.

파일 권한 부여

클래스는 FileAuthorizationModule 파일 권한 부여를 수행하고 Windows 인증 사용할 때 활성화됩니다. FileAuthorizationModule은 사용자에게 액세스 권한이 있어야 하는지 여부를 확인하기 위해 Windows ACL(Access Control Lists)에 대한 검사를 수행합니다.

URL 권한 부여

클래스는 UrlAuthorizationModule URI(Uniform Resource Identifier) 네임스페이스를 기반으로 권한 부여를 제어하는 URL(Uniform Resource Locator) 권한 부여를 수행합니다. URI 네임스페이스는 NTFS 권한에서 사용하는 실제 폴더 및 파일 경로와 다를 수 있습니다.

UrlAuthorizationModule 는 양수 및 부정 권한 부여 어설션을 모두 구현합니다. 즉, 모듈을 사용하여 사용자, 역할(예: 관리자, 테스터 및 관리자) 및 동사(예 GET : 및 POST)에 대한 URI 네임스페이스의 임의 부분에 대한 액세스를 선택적으로 허용하거나 거부할 수 있습니다.

ASP.NET 권한 부여에 대한 자세한 내용은 ASP.NET 권한 부여를 참조하세요.

역할 기반 보안

ASP.NET 역할 기반 보안은 중요한 차이점이 있지만 Microsoft COM+ 및 MTS(Microsoft Transaction Server)에서 사용하는 역할 기반 보안과 유사합니다. ASP.NET 역할 기반 보안은 Windows 계정 및 그룹에만 국한되지 않습니다. 예를 들어 Windows 인증 및 가장을 사용하는 경우 사용자의 ID는 Windows ID(User.Identity.Name = "Domain\username")입니다. 특정 역할의 멤버 자격에 대한 ID를 검사 그에 따라 액세스를 제한할 수 있습니다. 예를 들면

Visual Basic .NET 코드

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 코드

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");

Forms 인증을 사용하는 경우 역할은 인증된 사용자에게 할당되지 않습니다. 프로그래밍 방식으로 이 작업을 수행해야 합니다. 인증된 사용자에게 역할을 할당하려면 인증 모듈의 이벤트(이 예제의 Forms 인증 모듈)를 사용하여 OnAuthenticateGenericPrincipal 개체를 만들고 의 HttpContextUser 속성에 할당합니다. 다음 코드에서는 이를 보여 줍니다.

Visual Basic .NET 코드

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 코드

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 코드

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 코드

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 뉴스 그룹

자세한 내용은 다음 문서 또는 책을 참조하세요.