다음을 통해 공유


역할 관리 이해

업데이트: 2007년 11월

역할 관리를 통해 권한 부여를 관리하면 응용 프로그램 사용자가 액세스할 수 있는 리소스를 지정할 수 있습니다. 역할 관리를 이용하면 사용자를 관리자, 판매자, 멤버 등의 역할에 할당하여 사용자 그룹을 한 단위로 처리할 수 있습니다. Windows에서는 Administrators, Power Users 등의 그룹에 사용자를 할당하여 역할을 만듭니다.

역할을 설정한 후 응용 프로그램의 액세스 규칙을 만들 수 있습니다. 예를 들어, 사이트에 포함된 일련의 페이지를 멤버에게만 표시할 수 있습니다. 마찬가지로, 현재 사용자가 관리자인지 여부에 따라 페이지의 일부를 표시하거나 숨길 수 있습니다. 역할을 사용하면 개별 응용 프로그램 사용자와 독립적으로 이러한 종류의 규칙을 설정할 수 있습니다. 예를 들어 사이트의 개별 멤버에게 멤버 전용 페이지에 대한 액세스 권한을 부여할 필요가 없습니다. 대신 멤버 역할에 액세스 권한을 부여한 다음 사용자가 등록하거나 멤버 자격 유효 기간이 경과할 때 해당 역할에서 사용자를 추가하거나 제거할 수 있습니다.

사용자는 둘 이상의 역할에 속할 수 있습니다. 예를 들어, 토론 포럼 사이트의 경우 일부 사용자는 멤버와 사회자 역할을 모두 수행할 수 있습니다. 이 경우 사이트의 각 역할이 서로 다른 권한을 갖도록 정의한 다음 두 역할에 모두 속하는 사용자에게 두 가지 권한 집합을 부여할 수 있습니다.

응용 프로그램 사용자의 수가 적은 경우에도 역할을 만드는 것이 편리합니다. 역할을 사용하면 유연성 있게 권한을 변경할 수 있으며, 사이트 전체를 변경하지 않고도 사용자를 추가하거나 제거할 수 있습니다. 응용 프로그램에 정의한 액세스 규칙이 많은 경우 역할을 사용하면 보다 쉽게 사용자 그룹에 변경 내용을 적용할 수 있습니다.

역할 및 액세스 규칙

역할을 설정하는 기본 목적은 사용자 그룹의 액세스 규칙을 쉽게 관리하는 것입니다. 사용자를 만든 다음 사용자를 역할(Windows에서는 그룹)에 할당합니다. 일반적으로는 특정 사용자에게만 표시할 페이지를 만들 때 역할을 사용합니다. 대개 이러한 제한된 페이지는 한 폴더에 격리시킵니다. 그런 다음 제한된 폴더에 대한 액세스를 허용하거나 거부하는 규칙을 설정할 수 있습니다. 예를 들어, 사이트의 멤버나 관리자는 제한된 폴더의 페이지에 액세스할 수 있지만 다른 모든 사용자는 액세스하지 못하도록 사이트를 구성할 수 있습니다. 권한이 없는 사용자가 제한된 페이지를 보려고 하면 오류가 표시되거나 지정한 페이지로 리디렉션됩니다.

역할 관리, 사용자 ID 및 멤버 자격

역할을 사용하려면 사용자가 특정 역할에 속해 있는지 여부를 확인할 수 있도록 응용 프로그램의 사용자를 식별할 수 있어야 합니다. Windows 인증과 폼 인증이라는 두 가지 방법으로 사용자 ID를 설정하도록 응용 프로그램을 구성할 수 있습니다. 응용 프로그램이 LAN(Local Area Network)에서, 즉 도메인 기반 인트라넷 응용 프로그램에서 실행되는 경우 Windows 도메인 계정 이름을 사용하여 사용자를 식별할 수 있습니다. 이 경우에 사용자 역할은 해당 사용자가 속한 Windows 그룹입니다.

인터넷 응용 프로그램의 경우나 Windows 계정을 사용하는 것이 적합하지 않은 그 밖의 다른 경우에는 폼 인증을 사용하여 사용자 ID를 설정할 수 있습니다. 이를 위해서는 대개 사용자가 사용자 이름 및 암호를 입력한 후에 사이트에서 사용자 자격 증명을 확인할 수 있는 페이지를 만듭니다. ASP.NET Login 컨트롤을 사용하여 이러한 작업을 대부분 자동으로 수행하거나, 직접 로그인 페이지를 만든 후 FormsAuthentication 클래스를 사용하여 사용자 ID를 설정할 수 있습니다.

참고:

응용 프로그램에 ID가 설정되지 않은 사용자(익명 사용자)에는 역할을 적용할 수 없습니다.

Login 컨트롤이나 폼 인증을 사용하여 사용자 ID를 설정하면 역할 관리와 멤버 자격을 함께 사용할 수도 있습니다. 이 경우 멤버 자격을 사용하여 사용자 및 암호를 정의합니다. 그런 다음 역할 관리를 사용하여 역할을 정의하고 해당 역할에 멤버를 할당할 수 있습니다. 그러나 역할 관리는 멤버 자격과는 독립적으로 이루어집니다. 응용 프로그램에서 사용자 ID를 설정할 수 있는 경우 권한 부여에 역할 관리를 사용할 수 있습니다.

역할 관리 및 ASP.NET 역할 서비스

ASP.NET 역할 서비스를 사용하여 WCF(Windows Communication Framework) 서비스로 역할에 액세스할 수 있습니다. 역할 서비스를 통해 사용자는 WCF 서비스를 읽거나 사용할 수 있는 응용 프로그램의 사용자 역할을 확인할 수 있습니다. 예를 들어 Windows Forms 응용 프로그램, 웹 응용 프로그램 또는 .NET Framework를 사용하지 않는 응용 프로그램에서 사용자 역할을 확인할 수 있습니다. 역할 응용 프로그램 서비스에 대한 자세한 내용은 Windows Communication Foundation 역할 서비스 개요를 참조하십시오.

역할 관리 API

역할 관리는 페이지 또는 폴더에 대한 권한을 제한하는 기능만 하는 것이 아닙니다. 역할 관리를 이용할 경우 사용자가 역할에 속해 있는지 여부를 프로그래밍 방식으로 확인하기 위한 API를 사용할 수 있습니다. 이러한 API를 사용하면 사용자의 신분과 사용자가 속해 있는 역할에 따라 응용 프로그램 작업을 수행하는 역할 기반 코드를 작성할 수 있습니다.

응용 프로그램에서 사용자 ID를 설정하는 경우, 역할 관리 API 메서드를 사용하여 역할을 만들고, 역할에 사용자를 추가하고, 각 역할에 속한 사용자에 대한 정보를 가져올 수 있습니다. 이러한 메서드를 사용하면 역할 관리를 위한 인터페이스를 직접 만들 수 있습니다.

응용 프로그램에서 Windows 인증을 사용하는 경우에는 역할 관리 API를 통해 사용할 수 있는 역할 관리 기능이 줄어듭니다. 예를 들면, 역할 관리를 이용하여 새 역할을 만들 수 없습니다. 대신 Windows 사용자 및 그룹 관리를 이용하여 사용자 계정 및 그룹을 만들고 그룹에 사용자를 할당합니다. 이렇게 하면 역할 관리 기능에서 Windows 사용자 및 그룹 정보를 읽을 수 있으므로 이 정보를 사용하여 인증을 수행할 수 있습니다.

ASP.NET 역할 서비스를 사용하는 경우 사용자가 특정 역할에 속하는지 여부 또는 사용자에 대한 모든 역할을 검색할지 여부를 확인할 수 있습니다. 그러나 역할 서비스 API를 통해 역할을 관리할 수는 없습니다.

ASP.NET 역할 관리 작동 방식

역할 관리를 이용하려면 먼저 역할 관리 기능을 사용할 수 있게 설정하고 필요에 따라 역할을 사용할 수 있는 액세스 규칙을 구성합니다. 그런 다음 런타임에서 역할 관리 기능을 사용하여 역할 관련 작업을 처리할 수 있습니다.

역할 관리 구성

ASP.NET 역할 관리를 사용하려면 응용 프로그램의 Web.config 파일에서 다음과 같은 설정을 사용하여 역할 관리 기능을 활성화합니다.

<roleManager 
    enabled="true" 
    cacheRolesInCookie="true" >
</roleManager>

역할은 일반적으로 페이지 또는 폴더에 대한 액세스를 허용하거나 거부하는 규칙을 설정하는 데 사용됩니다. Web.config 파일의 authorization 섹션에서 이러한 액세스 규칙을 설정할 수 있습니다. 다음 예제에서는 MemberPages라는 폴더의 페이지를 멤버 역할의 사용자만 볼 수 있고 다른 사용자는 볼 수 없도록 설정하는 방법을 보여 줍니다.

<configuration>
  <location path="MemberPages">
    <system.web>
      <authorization>
        <allow roles="members" />
        <deny users="*" />
      </authorization>
    </system.web>
  </location>
  <!-- other configuration settings here -->
<configuration>

액세스 규칙을 설정하는 방법에 대한 자세한 내용은 ASP.NET 권한 부여를 참조하십시오.

또한 관리자 또는 멤버 등의 역할을 만들고 이 역할에 사용자 ID를 할당해야 합니다. 응용 프로그램에서 Windows 인증을 사용하는 경우 Windows 컴퓨터 유지 관리 도구를 사용하여 사용자와 그룹을 만듭니다.

폼 인증을 사용하는 경우 ASP.NET 웹 사이트 관리 도구를 사용하면 손쉽게 사용자와 역할을 설정할 수 있습니다. 원하는 경우 다양한 역할 관리자 메서드를 호출하여 이 작업을 프로그래밍 방식으로 수행할 수 있습니다. 다음 예제에서는 members 역할을 만드는 방법을 보여 줍니다.

Roles.CreateRole("members")
Roles.CreateRole("members");

다음 예제에서는 manager 역할에 사용자 JoeWorden을 개별적으로 추가하는 방법과 members 역할에 사용자 JillShrader 및 ShaiBassli를 동시에 추가하는 방법을 보여 줍니다.

Roles.AddUsersToRole("JoeWorden", "manager")
Dim userGroup(2) As String
userGroup(0) = "JillShrader"
userGroup(1) = "ShaiBassli"
Roles.AddUsersToRole(userGroup, "members")
Roles.AddUsersToRole("JoeWorden", "manager");
string[] userGroup = new string[2];
userGroup[0] = "JillShrader";
userGroup[1] = "ShaiBassli";
Roles.AddUsersToRole(userGroup, "members");
참고:

ASP.NET 역할 서비스를 통해서는 역할 관리 기능을 사용할 수 없습니다. 역할 서비스는 특정 사용자에 대한 정보만 반환할 수 있습니다.

런타임에 역할 사용

런타임에 사용자는 사이트를 방문할 때 Windows 계정 이름을 사용하거나 응용 프로그램에 로그인하는 방법으로 ID를 설정합니다. 인터넷 사이트에서 로그인하지 않고 익명으로 사이트를 방문하는 사용자는 사용자 ID가 없으므로 어떤 역할에도 속하지 않습니다. 로그인한 사용자에 대한 정보는 응용 프로그램에서 User 속성을 통해 볼 수 있습니다. 역할을 사용하도록 설정된 경우 ASP.NET에서는 현재 사용자의 역할을 찾은 다음 User 개체에 추가하여 사용자를 확인할 수 있도록 합니다. 다음 예제에서는 현재 사용자가 멤버 역할에 속해 있는지 여부를 확인하는 방법을 보여 줍니다. 사용자가 역할에 속해 있는 경우에는 코드에서 멤버에 대한 단추를 표시합니다.

If User.IsInRole("members") Then
   buttonMembersArea.Visible = True
End If
if (User.IsInRole("members"))
{
   buttonMembersArea.Visible = True;
}

또한 ASP.NET는 RolePrincipal 클래스의 인스턴스를 만들어 현재 요청 컨텍스트에 추가합니다. 그러면 특정 역할에 속한 사용자를 확인하는 등의 역할 관리 작업을 프로그래밍 방식으로 수행할 수 있습니다. . 다음 예제에서는 현재 로그인한 사용자의 역할 목록을 가져오는 방법을 보여 줍니다.

Dim userRoles() as String = CType(User, RolePrincipal).GetRoles()
string[] userRoles = ((RolePrincipal)User).GetRoles();

응용 프로그램에 LoginView 컨트롤을 사용하면 이 컨트롤에서 사용자 역할을 확인하고 사용자 역할에 따라 사용자 인터페이스를 동적으로 만들 수 있습니다.

역할 정보 캐싱

사용자의 브라우저에서 쿠키를 허용하는 경우 ASP.NET에서는 역할 정보를 암호화된 쿠키 형태로 사용자 시스템에 저장할 수도 있습니다. 페이지 요청이 있을 때마다 ASP.NET에서는 이 쿠키를 읽고 쿠키에서 해당 사용자에 대한 역할 정보를 채웁니다. 이 방법을 사용하면 데이터베이스에서 역할 정보를 읽어야 하는 경우가 최소화됩니다. 사용자의 브라우저에서 쿠키를 지원하지 않거나 쿠키를 사용할 수 없는 경우에는 대신 역할 정보가 각 페이지 요청 기간 동안만 캐싱됩니다.

참고 항목

개념

역할 관리 공급자

역할 관리 클래스

기타 리소스

ASP.NET 웹 사이트 보안