역할 기반 보안 정책 및 보안 주체 설정

역할 기반 정책을 사용하면 현재 사용자 및 해당 사용자의 역할을 구성 요소에서 런타임에 식별할 수 있습니다. 이러한 정보는 코드 액세스 보안 정책을 사용하여 매핑되며 런타임에 부여되는 권한을 식별하는 데 사용됩니다. 특정 응용 프로그램 도메인의 경우 호스트는 기본 역할 기반 보안 정책을 변경하고 기본 보안 주체를 설정할 수 있습니다. 보안 주체는 사용자 및 해당 사용자와 관련된 역할을 나타냅니다.

역할 기반 보안은 일반적으로 사용자 지정 인증 체계를 구현하는 데 사용됩니다. 예를 들어, ASP.NET 호스트는 역할 기반 보안을 사용하여, IIS(인터넷 정보 서비스)로부터 가져오는 사용자 정보를 기반으로 인증 체계를 구현합니다.

사용자 및 사용자의 역할에 대한 정의는 응용 프로그램에 따라 다릅니다. 응용 프로그램과 Windows의 사용자 개념은 서로 다를 수 있습니다. 예를 들어, 사용자가 특정 응용 프로그램에 로그온하기 위해서는 사용자 이름과 암호가 필요한데, 이 사용자 이름과 암호는 사용자가 Windows에 로그인할 때 사용한 사용자 이름/암호와는 다릅니다.

명시적으로 스레드의 보안 주체 설정

스레드의 보안 주체가 설정된 경우 응용 프로그램 도메인의 정책과 기본 보안 주체는 무시됩니다. 예를 들어, 스레드에서 Thread 클래스의 CurrentPrincipal 정적 속성(Visual Basic의 Shared 속성)을 사용하여 보안 주체를 설정했을 수 있습니다. 또는 해당 스레드를 시작한 스레드에서 보안 주체를 가져왔을 수 있습니다.

참고

.NET Framework 버전 2.0에서는 스레드가 다른 스레드를 시작하거나 작업 항목을 스레드 풀에서 실행되도록 큐에 대기시키면 해당 스레드의 보안 주체를 비롯한 컨텍스트는 자동으로 자식 스레드나 스레드 풀 스레드로 이어집니다..NET Framework 버전 1.0과 1.1에서는 컨텍스트가 스레드에 의해 시작된 스레드로만 이어지고 스레드 풀 스레드로는 이어지지 않았습니다.

보안 주체가 없는 스레드에서 보안 주체가 필요한 작업을 수행하면 현재 응용 프로그램 도메인의 보안 주체와 기본 보안 주체에 따라 보안 주체가 제공됩니다.

참고

보안 주체가 없는 스레드에서 CurrentPrincipal 정적 속성을 사용하여 보안 주체를 쿼리하면 보안 주체를 설정하는 데 응용 프로그램 도메인의 기본값이 사용됩니다.즉, CurrentPrincipal은 null을 반환하지 않습니다.

응용 프로그램 도메인의 정책 및 기본 보안 주체

호스트에서는 SetThreadPrincipal 메서드를 호출하여 응용 프로그램 도메인의 기본 보안 주체를 설정할 수 있습니다. 기본 보안 주체를 제공한 후에는 해당 응용 프로그램 도메인에서 실행되며 보안 주체가 필요하지만 아직 없는 모든 스레드에 이 보안 주체가 할당됩니다.

참고

스레드에서 SetThreadPrincipal을 호출할 경우에는 보안 주체가 없더라도 기본 보안 주체가 자동으로 적용되지 않습니다.나중에 해당 스레드에서 보안 주체가 필요할 경우 이전에 보안 주체가 할당되지 않았으면 해당 스레드가 실행되고 있는 응용 프로그램 도메인의 기본 보안 주체와 정책에 따라 보안 주체가 할당됩니다.

응용 프로그램 도메인에 기본 보안 주체가 설정되어 있지 않으면 응용 프로그램 도메인의 정책에 따라 스레드에 보안 주체가 할당됩니다. 응용 프로그램 도메인의 정책을 따를 경우 기본적으로 인증되지 않은 일반 보안 주체가 스레드에 할당됩니다. 호스트에서는 SetPrincipalPolicy 메서드를 호출하여 응용 프로그램 도메인의 이 정책을 변경할 수 있습니다. 예를 들어, 다음 관리 코드는 응용 프로그램 도메인을 만들고 현재 Windows 보안 주체를 사용하도록 해당 정책을 설정합니다.

Dim ad As AppDomain = AppDomain.CreateDomain("Child")
ad.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal)
AppDomain ad = AppDomain.CreateDomain("Child");
ad.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal);
AppDomain^ ad = AppDomain::CreateDomain("Child");
ad->SetPrincipalPolicy(PrincipalPolicy::WindowsPrincipal);

관리되지 않는 호스트에서는 .NET Framework 버전 간에 vtable 순서를 유지하는 _AppDomain 인터페이스를 사용하여 응용 프로그램 도메인에 액세스할 수 있습니다.

참고 항목

참조

System.AppDomain

기타 리소스

호스팅 개요

역할 기반 보안

주요 보안 개념