Share via


방법: WIF 및 ACS를 사용하여 클레임 인식 ASP.NET 애플리케이션에서 RBAC(역할 기반 Access Control) 구현

업데이트: 2015년 6월 19일

Azure에 적용합니다.

적용 대상

  • Microsoft Azure Active Directory 액세스 제어(액세스 제어 서비스 또는 ACS라고도 함)

  • WIF(Windows® Identity Foundation)

  • ASP.NET

요약

이 항목에서는 WIF 및 ACS를 사용하여 클레임 인식 ASP.NET 웹 애플리케이션에서 RBAC(역할 기반 Access Control) 권한 부여를 구현하는 방법을 설명합니다.

콘텐츠

  • 목표

  • 개요

  • 단계 요약

  • 1단계 – 간단한 클레임 인식 ASP.NET 웹 응용 프로그램 만들기

  • 2단계 – ACS에서 역할 클레임 구성

  • 3단계 – ASP.NET 웹 응용 프로그램에서 역할 검사 구현

  • 4단계 – 사용자 지정 ClaimsAuthenticationManager를 사용하여 클레임 변환 구현

  • 5단계 – 작업 테스트

  • 관련 항목

목표

  • ACS를 사용하여 역할 클레임을 구성합니다.

  • ClaimsAuthenticationManager를 사용하여 역할 클레임을 변환합니다.

  • IsInRole 메서드 및 PrinciaplPermission 특성을 사용하여 역할 기반 액세스 제어 검사를 구현합니다.

개요

RBAC는 응용 프로그램의 액세스 제한에 널리 채택된 접근 방식입니다. ASP.NET 웹 애플리케이션에서 이 방법은 ASP.NET 1.0부터 사용할 수 있는 IsInRole 메서드, PrincipalPermission 특성 또는 요구를 사용하여 구현됩니다. 권한 부여를 위해 클레임을 사용할 수 있으므로 WIF 및 ACS와 같은 새로운 기술을 사용하는 동안 잘 설정된 사례를 유지할 수 있습니다. WIF 런타임 및 SDK는 다음 링크를 통해 다운로드할 수 있습니다.

단계 요약

  • 1단계 – 간단한 클레임 인식 ASP.NET 웹 응용 프로그램 만들기

  • 2단계 – ACS에서 역할 클레임 구성

  • 3단계 – ASP.NET 웹 응용 프로그램에서 역할 검사 구현

  • 4단계 – 사용자 지정 ClaimsAuthenticationManager를 사용하여 클레임 변환 구현

  • 5단계 – 작업 테스트

1단계 – 간단한 클레임 인식 ASP.NET 웹 응용 프로그램 만들기

이 단계에서는 RBAC를 구현하기 위한 기준으로 사용될 기본 ASP.NET 웹 응용 프로그램을 만드는 방법을 보여 줍니다.

간단한 ASP.NET 웹 응용 프로그램을 만들려면

  1. "관리자 권한으로 실행" 옵션을 사용하여 Visual Studio를 시작합니다. WIF를 사용하기 위해서는 반드시 이렇게 해야 합니다.

  2. 새 ASP.NET 빈 웹 응용 프로그램을 만듭니다.

  3. aspx Web Form을 추가한 후 이름을 지정합니다(예: default.aspx).

2단계 – ACS에서 역할 클레임 구성

이 단계에서는 규칙 그룹을 사용하여 ACS 관리 포털에서 역할 클레임을 구성하는 방법을 보여 줍니다. 방법: 전체 단계별 연습에 대한 규칙을 사용하여 토큰 변환 논리 구현 을 참조하세요.

ACS 관리 포털에서 역할 클레임을 구성하려면

  1. 신뢰 당사자 응용 프로그램 편집 페이지에서 규칙 그룹 섹션이 나올 때까지 아래로 스크롤한 다음 원하는 그룹의 링크를 클릭합니다. 원하는 그룹이 선택되었는지 확인합니다.

  2. 규칙 그룹 편집 페이지에서 규칙 섹션이 나올 때까지 아래로 스크롤한 다음 규칙 추가 링크를 클릭합니다.

  3. 클레임 규칙 추가 페이지에서 출력 클레임 유형 섹션이 나올 때까지 아래로 스크롤하고 유형 선택 라디오 단추를 클릭한 후 다음 클레임 유형을 선택합니다.

    https://schemas.microsoft.com/ws/2008/06/identity/claims/role
    
  4. 출력 클레임 값 섹션에서 값 입력을 클릭한 후 텍스트 상자에 다음 텍스트를 값으로 입력합니다.
    사용자

  5. 선택적으로(권장) 설명을 추가한 후 저장을 클릭합니다.

방금 모든 토큰에 추가될 수 있는 사용자 역할 클레임을 구성했습니다. 시나리오는 사용자의 요구 사항에 따라 다를 수 있습니다. 더 복잡한 규칙을 구성하는 방법에 대한 자세한 내용은 방법: 규칙을 사용하여 토큰 변환 논리 구현을 참조하세요.

3단계 – ASP.NET 웹 응용 프로그램에서 역할 검사 구현

이 단계에서는 RBAC를 구현하는 방법을 보여 줍니다.

ASP.NET 웹 페이지에서 RBAC를 구현하려면

  1. Microsoft.IdentityModel 어셈블리에 대한 참조를 추가합니다.

  2. 코드 숨김 default.aspx.cs를 엽니다.

  3. 선언을 사용하여 다음을 추가합니다.

    using System.Security.Permissions;
    using System.Threading;
    using Microsoft.IdentityModel.Claims;
    using System.Security;
    
  4. Page_Load 이벤트 처리기를 다음 보안 요청으로 데코레이팅합니다. 이 특성은 현재 사용자가 사용자 역할인지 여부를 확인합니다. 사용자 역할이 아닌 경우 예외가 throw됩니다.

    [PrincipalPermission(SecurityAction.Demand, Role = "User")]
    
  5. Page_Load 이벤트 처리기의 본문에 다음 코드를 추가합니다. 이는 코드에 표현된 요청과 정확히 동일합니다.

    PrincipalPermission p = new PrincipalPermission(null, "User");
       p.Demand();
    
  6. Page_Load 이벤트의 본문에 다음 코드를 추가합니다. 이전 코드와 달리 이 코드에서는 예외가 throw되지 않습니다. 대신 IsInRole은 현재 사용자에게 지정된 역할이 있는지 여부를 나타내는 부울을 반환합니다.

    if (!User.IsInRole("User"))
                    throw new SecurityException("Access is denied.");
    
  7. 완성된 코드는 다음과 유사합니다.

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    
    using System.Security.Permissions;
    using System.Threading;
    using Microsoft.IdentityModel.Claims;
    using System.Security;
    
    namespace WebIsInRoleACS
    {
        public partial class _default : System.Web.UI.Page
        {
            //THIS SHOULD THROW AN EXCEPTION
            [PrincipalPermission(SecurityAction.Demand, Role = "User")]
            protected void Page_Load(object sender, EventArgs e)
            {
    
                //THIS SHOULD THROW AN EXCEPTION
                PrincipalPermission p = new PrincipalPermission(null, "User");
                p.Demand();
    
                //THIS RETURNS BOOL
                if (!User.IsInRole("User"))
                    throw new SecurityException("Access is denied.");
            }
        }
    }
    

4단계 – 사용자 지정 ClaimsAuthenticationManager를 사용하여 클레임 변환 구현

선택적 단계입니다. 이 단계에서는 2단계 – ACS에서 역할 클레임 구성에 설명된 대로 ACS에서 실행되는 클레임 변환 규칙과 달리 ASP.NET 애플리케이션의 컨텍스트 내에서 실행되는 WIF 파이프라인의 일부인 ClaimsAuthenticationManager를 사용하여 클레임을 변환하는 방법을 보여 줍니다.

사용자 지정 ClaimsAuthenticationManager를 사용하여 클레임 변환을 구현하려면

  1. Visual Studio 솔루션에 클래스 라이브러리 프로젝트를 추가한 후 이름을 지정합니다(예: MyClaimsTransformationModule).

  2. Microsoft.IdentityModel 어셈블리에 대한 참조를 추가합니다.

  3. System.IdentityModel 어셈블리에 대한 참조를 추가합니다.

  4. 새 클래스를 만든 후 이름을 지정합니다(예: ClaimsTransformationModule).

  5. 클래스에 다음 선언을 추가합니다.

    using Microsoft.IdentityModel.Claims;
    using System.Security.Principal;
    
  6. ClaimsAuthenticationManager 유형에서 클래스를 파생시킵니다.

  7. 해당 인증 메서드(여기서 클레임 변환이 수행됨)를 재정의합니다. 인증 메서드의 코드는 다음을 기반으로 할 수 있습니다.

    if (incomingPrincipal != null && incomingPrincipal.Identity.IsAuthenticated == true)
    {
        //DECIDE ON SOME CRITERIA IF CURRENT USER DESERVES THE ROLE
        //IClaimsIdentity identity = (IClaimsIdentity)incomingPrincipal.Identity;
        ((IClaimsIdentity)incomingPrincipal.Identity).Claims.Add(
            new Claim(ClaimTypes.Role, "Admin"));
    }
    return incomingPrincipal;
    
  8. ASP.NET 응용 프로그램으로 전환하고 해당 web.config에서 사용자 지정 ClaimsAuthenticationManager를 구성합니다.

      <microsoft.identityModel>
        <service>
          <claimsAuthenticationManager type="MyClaimsTransformationModule.ClaimsTransformationModule, MyClaimsTransformationModule" />
    
  9. 만든 새 어셈블리를 응용 프로그램이 찾을 수 있는지 확인합니다. 가장 간단한 방법은 새 어셈블리를 응용 프로그램의 bin 폴더에 배치하는 것입니다.

5단계 – 작업 테스트

이 단계에서는 솔루션이 작동하는지 유효성을 검사하는 방법을 보여 줍니다. 솔루션을 테스트하려면 F5 키를 누릅니다. ASP.NET 웹 응용 프로그램이 디버그 모드로 실행됩니다(Visual Studio 내에서 코드 실행을 확인하기 위해 중단점을 추가할 수 있음). 먼저, 페더레이션에 대해 구성된 ID 공급자의 인증 페이지로 이동되어야 합니다. 인증이 완료된 후 예외가 throw되지 않고 다시 Default.aspx 페이지로 리디렉션되어야 합니다. 즉, 사용자 역할에 대한 모든 보안 요청이 충족된 것입니다.