다음을 통해 공유


클레임 인식 웹 응용 프로그램 및 서비스의 권한 부여

업데이트: 2015년 6월 19일

Azure에 적용합니다.

적용 대상

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

  • WIF(Windows® Identity Foundation)

  • ASP.NET

  • WCF(Windows Communication Foundation)

요약

신뢰 당사자 애플리케이션에서 권한 부여에 따라 인증된 ID가 액세스할 수 있도록 허용되는 리소스 및 이러한 리소스에서 수행할 수 있도록 허용되는 작업이 결정됩니다. 권한 부여가 부적절하거나 취약한 상태인 경우 정보가 노출되거나 데이터가 변조될 수 있습니다. 이 항목에서는 ACS 및 WIF를 사용하여 클레임 인식 ASP.NET 웹 애플리케이션 및 서비스에 대한 권한 부여를 구현하는 사용 가능한 방법을 간략하게 설명합니다.

목표

  • 클레임을 사용하는 권한 부여 접근 방식을 나열합니다.

  • 각 접근 방식의 개략적인 디자인을 간략하게 설명합니다.

  • 각 접근 방식의 장점과 단점을 설명합니다.

개요

.NET Framework는 첫 번째 버전부터 권한 부여를 구현하는 유연한 메커니즘을 제공해 왔습니다. 이 메커니즘은 두 가지 단순한 인터페이스 IPrincipalIIentity를 기반으로 합니다. IIentity의 구체적 구현은 인증된 사용자를 나타냅니다. 예를 들어 WindowsIdentity 구현은 Active Directory에서 인증된 사용자를 나타내고 GenericIdentity 는 사용자 지정 인증으로 인증된 사용자를 나타냅니다. IPrincipal의 구체적 구현은 역할 저장소에 따라 역할을 사용하여 권한을 확인하는 데 도움이 됩니다. 예를 들어 WindowsPrincipal은 Active Directory 그룹의 멤버에 대한 WindowsIdentity를 확인합니다. 이 확인은 IPrincipal 인터페이스에서 IsInRole 메서드를 호출하여 수행됩니다. 역할을 기반으로 액세스 권한을 확인하는 것을 RBAC(역할 기반 액세스 제어)라고 합니다. RBAC는 이 항목의 “역할 기반 액세스 제어” 섹션에 설명되어 있습니다. 클레임을 사용하여 친숙한 역할 기반 권한 부여 메커니즘을 지원하기 위해 역할에 대한 정보를 전달할 수 있습니다.

또한 클레임을 사용하면 역할 이상의 훨씬 더 풍부한 권한 부여 결정이 가능합니다. 클레임은 사실상 모든 것(연령, 우편 번호, 신발 크기 등)을 기반으로 할 수 있습니다. 임의 클레임을 기반으로 액세스 권한을 확인하는 것을 CBAC(클레임 기반 액세스 제어) 또는 클레임 기반 권한 부여라고 합니다. 클레임 기반 권한 부여는 이 항목의 “클레임 기반 액세스 제어” 섹션에 설명되어 있습니다.

권한 부여 검사는 ACS 쪽이 아닌 애플리케이션 쪽에서 수행됩니다. ACS는 애플리케이션에 클레임을 전달하는 토큰을 발급하는 STS(보안 토큰 서비스)로 사용됩니다. 토큰은 ID 공급자의 클레임으로 보강되고 필요에 따라 ACS 자체에서 규칙 엔진을 사용하여 보강됩니다. 응용 프로그램은 클레임이 포함된 토큰을 받으면 토큰을 구문 분석하고 관련 클레임을 추출하며 RBAC 또는 클레임 기반 접근 방식을 사용하여 권한 부여를 결정할 수 있습니다. WIF를 사용하여 토큰을 구문 분석하고 구문 분석한 내용을 사용하기 쉬운 API(응용 프로그래밍 인터페이스)를 통해 권한 부여 결정에 유용하게 사용할 수 있습니다. WIF에 대한 자세한 내용은 WIF SDK (https://go.microsoft.com/fwlink/?LinkID=187481)를 참조하세요. 클레임 인식 응용 프로그램 및 서비스의 권한 부여에 대해 생각할 때 다음 다이어그램을 고려하세요. 인증에 성공하면 ID 공급자는 토큰(다이어그램의 IdP 토큰)을 생성합니다. IDP 토큰은 ACS 규칙 엔진에서 변환할 수 있습니다. ACS는 ID 공급자가 발급하는 토큰에 포함된 클레임을 추가, 제거 또는 변경할 수 있습니다. 마지막으로 ACS에서 발급한 토큰이 애플리케이션으로 전송되고 WIF에서 처리됩니다. 액세스 권한 확인은 RBAC 또는 CBAC 접근 방식을 통해 WIF에서 수행됩니다.

ACS v2 WIF Authorization

역할 기반 Access Control

RBAC는 사용자 역할에 따라 애플리케이션에서 사용자 권한을 관리하고 적용하는 권한 부여 방법입니다. 사용자에게 작업을 수행하는 데 필요한 역할이 있는 경우 액세스 권한이 부여되고, 그렇지 않으면 액세스가 거부됩니다.

IPrincipal.IsInRole 메서드

클레임 인식 응용 프로그램에서 RBAC 접근 방식을 구현하려면 비 클레임 인식 응용 프로그램에서 하는 것처럼 IPrinicpal 인터페이스 IsInRole() 메서드를 사용하면 됩니다. IsInRole() 메서드를 사용하는 방법은 다음과 같이 여러 가지입니다.

  • IPrincipal.IsInRole(“Administrator”)에 대해 명시적으로 호출. 이 방법에서는 결과가 부울입니다. 이는 조건문에서 사용되며, 코드에서 임의의 위치에 사용할 수 있습니다.

  • 보안 요청 PrincipalPermission.Demand() 사용. 이 방법에서는 요청이 충족되지 않는 경우 결과가 예외입니다. 이는 예외 처리 전략에 맞아야 합니다. 예외를 throw하는 것은 성능 관점에서 봤을 때 부울을 사용 중지하는 것에 비해 훨씬 더 비용이 많이 듭니다. 이는 코드에서 임의의 위치에 사용할 수 있습니다.

  • 선언적 특성 [PrincipalPermission(SecurityAction.Demand, Role = “Administrator”)] 사용. 이 방법은 메서드를 데코레이팅하는 데 사용되므로 선언적이라고 합니다. 메서드 구현 내의 코드 블록에는 사용할 수 없습니다. 요청이 충족되지 않는 경우 결과가 예외입니다. 예외 처리 전략에 맞는지 확인해야 합니다.

  • URL 권한 부여 사용, web.config권한 부여> 섹션 사용<. 이 방법은 URL 수준에서 권한 부여를 관리하는 경우에 적합합니다. 이는 앞서 언급한 것 중에서 가장 정교하지 않은 수준입니다. 이 방법의 장점은 구성 파일에서 내용이 변경되므로 변경 내용을 활용하기 위해 코드를 컴파일하지 않는다는 점입니다.

역할을 클레임으로 표시

IsInRole() 메서드가 호출되면 현재 사용자에게 해당 역할이 있는지 확인하기 위한 검사가 수행됩니다. 클레임 인식 애플리케이션에서는 역할이 토큰에서 사용할 수 있는 역할 클레임 형식으로 표시됩니다. 역할 클레임 형식은 다음 URI를 사용하여 표시됩니다.

https://schemas.microsoft.com/ws/2008/06/identity/claims/role

여러 가지 방법으로 역할 클레임 형식을 사용하여 토큰을 보강할 수 있습니다.

  • ACS 규칙 엔진 사용 - 이 경우 ACS 관리 포털 또는 ACS 관리 서비스를 사용하여 특정 역할 유형의 클레임을 생성하는 클레임 변환 규칙을 만드는 규칙을 만듭니다. 규칙 및 토큰 변환에 대한 자세한 내용은 규칙 그룹 및 규칙 및방법: 규칙을 사용하여 토큰 변환 논리 구현을 참조하세요.

  • ClaimsAuthenticationManager를 사용하여 임의 클레임을 클레임 역할 유형으로 변환 - ClaimsAuthenticationManager는 WIF의 일부로 제공되는 구성 요소로서, 이는 토큰을 검사하고 클레임을 추가, 변경 또는 제거하여 해당 토큰을 변형하면서 애플리케이션을 시작할 때 요청을 가로챌 수 있도록 허용합니다. 클레임 변환에 ClaimsAuthenticationManager를 사용하는 방법에 대한 자세한 내용은 WIF 및 ACS를 사용하여 클레임 인식 ASP.NET 애플리케이션에서 RBAC(역할 기반 Access Control) 구현 방법을 참조하세요.

  • samlSecurityTokenRequirement 구성 섹션을 사용하여 임의 클레임을 역할 유형에 매핑 - 클레임을 변환하는 데 구성만 사용하고 코딩은 필요하지 않은 선언적 접근 방식입니다.

클레임 기반 액세스 제어

CBAC는 액세스 권한을 부여하거나 거부하는 권한 부여 결정이 결정을 위해 클레임에서 사용 가능한 데이터를 사용하는 임의 논리를 기반으로 하는 권한 부여 접근 방식입니다. RBAC의 경우 사용되는 유일한 클레임은 역할 형식 클레임이라는 점에 유의하십시오. 사용자가 특정 역할에 속하는지 여부를 확인하기 위해 역할 형식 클레임이 사용되었습니다. 클레임 기반 권한 부여 방법을 사용하여 권한 부여 결정을 내리는 과정을 설명하기 위해 다음 단계를 고려하십시오.

  1. 응용 프로그램이 요청을 받습니다.

  2. 응용 프로그램이 들어오는 클레임을 추출합니다.

  3. 애플리케이션이 의사 결정 논리 메커니즘에 클레임을 전달합니다. 결정 논리 메커니즘은 메모리 내 코드이거나 웹 서비스에 대한 호출, 데이터베이스에 대한 쿼리이거나 정교한 규칙 엔진을 호출할 수 있습니다.

  4. 의사 결정 메커니즘이 클레임에 따라 결과를 계산합니다.

  5. 결과가 true이면 액세스가 허용되고 false인 경우에는 거부됩니다. 예를 들어 사용자가 21세 이상이고, 워싱턴 주에 거주하며, Windows Live ID(Microsoft 계정)로 인증되었을 수 있습니다.

ACS는 클레임을 전달하는 토큰을 발급하는 STS 역할을 합니다. ACS 규칙 엔진을 사용하여 발급되는 클레임(클레임 유형 및 값 모두)을 제어할 수 있습니다. ACS 규칙 엔진에 대한 자세한 내용은 규칙 그룹 및 규칙 및방법: 규칙을 사용하여 토큰 변환 논리 구현을 참조하세요. ClaimsAuthorizationManager는 클레임 인식 응용 프로그램에서 CBAC를 구현하는 데 핵심적인 역할을 담당합니다. ClaimsAuthorizationManager는 WIF의 일부로 제공되는 구성 요소입니다. ClaimsAuthorizationManager를 사용하면 들어오는 요청을 가로채고 들어오는 클레임에 따라 권한 부여 결정을 수행하도록 선택 항목의 논리를 구현할 수 있습니다. 또한 ClaimsAuthorizationManager는 권한 부여 결정이 응용 프로그램 코드에서 표면화 및 분리될 수 있는 확장성 요소입니다. 이는 권한 부여 논리를 변경해야 하는 경우 중요합니다. 이러한 경우 ClaimsAuthorizationManager를 사용해도 애플리케이션의 무결성에 영향을 미치지 않으므로, 변경으로 인해 애플리케이션에 오류가 발생할 가능성이 줄어듭니다. ClaimsAuthorizationManager를 사용하여 클레임 기반 액세스 제어를 구현하는 방법에 대한 자세한 내용은 방법: WIF 및 ACS를 사용하여 클레임 인식 ASP.NET 애플리케이션에서 클레임 권한 부여 구현을 참조하세요.

참고 항목

개념

ACS를 사용하는 시나리오 및 솔루션