.NET Framework 사용자 작업의 기본 사항
업데이트: 2007년 11월
.NET Framework에서는 응용 프로그램에서 사용자를 인증하고 사용자에게 권한을 부여하는 데 사용할 수 있는 System.Security.Principal 네임스페이스의 역할 기반 보안 구현을 제공합니다. 이 항목에서는 .NET Framework에서 응용 프로그램 권한 부여를 처리하고 사용자를 나타내는 IIdentity 및 IPrincipal 개체를 만드는 방법을 설명합니다.
IIdentity는 인증된 사용자를 캡슐화합니다. IPrincipal은 사용자의 ID와 해당 사용자의 역할을 조합한 것입니다. System.Security.Principal 네임스페이스의 미리 정의된 ID와 principal 클래스를 사용하거나 인터페이스를 구현하는 클래스를 만들어 사용자 지정 인증을 추가할 수 있습니다.
이 인터페이스를 사용하려면 관련 소스 코드 파일의 시작 부분에 Imports 문을 넣어서 적절한 네임스페이스를 가져오거나 인터페이스 이름을 정규화해야 합니다. 자세한 내용은 Imports 문(.NET 네임스페이스 및 형식)을 참조하십시오.
.NET Framework 응용 프로그램에서 역할 기반 보안 사용
각 응용 프로그램 스레드에는 코드를 실행 중인 사용자의 보안 컨텍스트를 나타내는 관련 principal 개체(CurrentPrincipal 속성을 통해 액세스 가능)가 있을 수 있습니다. principal 개체는 사용자의 사용자 보안 컨텍스트 또는 ID 개체를 캡슐화할 수 있습니다. 두 개체를 사용하면 인증(ID 개체에서)과 권한 부여(principal에서)를 분리할 수 있습니다.
ID 개체는 IIdentity 인터페이스를 구현해야 합니다. ID 개체는 특정 사용자를 나타내며 IIdentity 인터페이스에 필요한 Name, IsAuthenticated 및 AuthenticationType 속성을 노출합니다. ID 개체에는 일반적으로 사용자 인증을 수행하는 추가적인 private 멤버가 있습니다.
principal 개체는 IPrincipal 인터페이스를 구현해야 합니다. principal 개체는 IPrincipal 인터페이스에 필요한 IsInRole 메서드(권한 부여 수행)와 Identity 속성(사용자의 ID 개체에 대한 액세스 제공) 멤버를 노출하여 사용자의 보안 컨텍스트를 캡슐화합니다.
ID 작업
.NET Framework에서는 IIdentity 인터페이스를 구현하는 네 개의 클래스를 제공합니다.
각 클래스를 통해 서로 다른 종류의 사용자 ID를 사용할 수 있습니다. Windows 인증을 사용하는 응용 프로그램에 대한 현재 WindowsIdentity 개체에 액세스하려면 WindowsIdentity 클래스의 정적 GetCurrent 메서드를 사용합니다. My.User.InitializeWithWindowsUser 메서드를 호출하여 현재 스레드의 principal을 설정할 수도 있습니다.
또한 사용자 지정 클래스에서 IIdentity 인터페이스를 구현하여 사용자 지정 ID 클래스를 만들 수도 있습니다. 사용자 지정 ID를 만드는 방법에 대한 자세한 내용은 연습: 사용자 지정 인증 및 권한 부여 구현을 참조하십시오.
principal 작업
.NET Framework에서는 사용자 역할과 ID를 연결하는 IPrincipal 인터페이스를 제공합니다. 응용 프로그램에서 권한 부여를 수행하는 경우 IPrincipal을 구현하는 개체를 사용해야 합니다. 예를 들어, WindowsIdentity 및 GenericIdentity 클래스에는 IPrincipal의 기본 제공 구현이 들어 있습니다. 또는, IPrincipal을 기반으로 사용자 지정 principal 클래스를 만들 수도 있습니다.
개체를 스레드의 CurrentPrincipal 속성 또는 My.User.CurrentPrincipal 속성에 할당하여 현재 스레드를 IPrincipal 개체에 연결할 수 있습니다. 그런 다음 사용자가 특정 역할의 멤버인지 여부를 테스트하여 권한 부여를 수행할 수 있습니다. 이 작업은 principal의 IsInRole 메서드를 사용하여 수행할 수 있습니다.
ASP.NET 응용 프로그램에서는 다른 .NET Framework 응용 프로그램과는 다른 방식으로 IPrincipal 개체를 처리합니다. ASP.NET에서는 상태 비저장 HTTP 프로토콜을 통해 세션의 모양을 만듭니다. 이 세션의 일부로 사용자의 요청을 실행하는 모든 코드에 대한 HttpContext 개체의 User 속성에서 사용자를 나타내는 IPrincipal 개체를 사용할 수 있습니다. 공용 언터 런타임은 Global.asax 파일의 OnAuthenticate 이벤트 후에 CurrentPrincipal을 User 값으로 자동 업데이트합니다. ASP.NET 응용 프로그램은 종종 User 속성을 사용하여 권한 부여 검사를 수행합니다.
참고: |
---|
User를 수동으로 변경하면 같은 HTTP 컨텍스트 내에서 실행되는 모든 스레드에 대해 CurrentPrincipal 속성이 자동으로 업데이트됩니다. 하지만 CurrentPrincipal을 변경하더라도 User 속성에는 영향이 없습니다. 이러한 변경은 요청의 나머지 부분에 대해 선택된 스레드에만 영향을 줍니다. |
ASP.NET 응용 프로그램에서는 My.User.CurrentPrincipal 속성이 User 속성을 업데이트합니다.
사용자 지정 IPrincipal 형식 만들기에 대한 자세한 내용은 연습: 사용자 지정 인증 및 권한 부여 구현을 참조하십시오.
IIdentity 및 IPrincipal 개체를 사용할 수 있는 권한 부여
IIdentity 개체는 중요한 사용자 관련 정보를 사용 가능하게 만들기 때문에 이들 개체를 사용할 수 있는 권한을 부여할 때는 주의해야 합니다. 응용 프로그램의 권한 부여 기능은 현재 principal을 기반으로 하기 때문에 응용 프로그램의 현재 IPrincipal 개체가 변경되지 않도록 보호해야 합니다.
.NET Framework에서는 코드 액세스 보안 권한이 있어야만 이러한 작업을 수행할 수 있도록 함으로써 보호 기능을 제공합니다. 코드 액세스 보안 정책 도구(Caspol.exe)를 사용하여 이들 개체를 조작해야 하는 응용 프로그램에 SecurityPermissionAttribute.ControlPrincipal 권한을 부여합니다.
기본적으로 로컬에 설치된 모든 응용 프로그램은 FullTrust 권한 집합 아래에서 실행되므로 이 권한을 갖고 있습니다.
다음 메서드를 실행하려면 ControlPrincipal 권한이 있어야 합니다.