Spring/additional

[Spring] Claim 기반 권한 부여

sujin7837 2021. 2. 14. 01:46
반응형

클레임(Claim) 기반 권한 부여의 등장 배경

역할 기반 보안의 한계

역할 기반의 보안은 엔터프라이즈 규모의 서비스 중심 응용 프로그램에 적용하기에는 지나치게 복잡해집니다. 또한 복잡한 시스템에서는 IIdentity와 IPrincipal만으로 신원과 권한 부여 데이터를 모델링하기에 부족하게 됩니다. 역할 기반 인증은 이진 값만을 결정으로 반환하고 임의의 데이터를 활용할 수 없으므로 분산 시스템에 참여하는 주체의 신원을 설명할 수 있는 기술 중립적인 형식이 필요하게 됩니다.

 

System.IdentityModel

System.IdentityModel의 클래스와 개념을 기반으로 새로운 프레임워크가 구축되었으며, 이 프레임워크는 서비스와 응용 프로그램에 클레임 기반이 보안을 도입하기 수월하게 지원합니다. 또한 System.IdentityModel과 Zermatt가 WCF와 어떤 식으로든 연결되어 있지 않기 때문에 모든 .NET 응용 프로그램에서 클레임을 사용할 수 있습니다. System.IdentityModel 네임 스케이스에서 알아야 할 가장 중요한 구조적 클래스는 Claim, ClaimSet, AuthorizationContext, 그리고 AuthorizationPolicy입니다.

 

1. Claim

-클레임은 사용자 시스템에 있는 주체와 연결되는 정보 조각입니다. 대게 이 주체가 사용자가 되지만, 서비스나 다른 리소스가 될 수도 있습니다. 클레임은 3가지 정보로 구성되며, 이 데이터 구조는 System.IdentityModel.Claims.Claim이라는 클래스로 표현됩니다. 또한 Claim 클래스는 DataContract이므로 직렬화에 유리합니다. 이 점은 클레임을 서비스 경계를 넘어 전송하려고 계획할 때 중요하게 작용합니다.

-클레임의 3가지 정보: 클레임 유형, 클레임 내용, 클레임이 대상의 신원을 나타내느냐 기능을 나타내느냐의 여부

 

-ClaimType: 클레임의 유형을 나타내는 URI입니다. 고유한 자체 URI를 사용할 수도 있지만, ClaimTypes 클래스에 몇 가지 표준 클레임 유형이 마련되어 있습니다. 이름을 나타내는 클레임은 ClaimTypes.Name에 저장되는 URI 값을 사용할 수 있습니다.

-Resource: 실제 클레임의 값을 포함합니다. Resource는 개체이므로 간단한 문자열에서 복잡한 그래프에 이르기까지 다양하고 복잡한 정보를 여기에 저장할 수 있습니다. 다만 직렬화가 필요한 경우 문제가 될 수 있습니다. 직렬화가 필요하다면 기본 형식만 사용하는 것이 좋습니다.

-새 클레임: Claim 생성자를 사용해서 만들거나 표준 클레임 유형의 경우는 Claim 클래스의 정적 메소드 중 하나를 사용해서 만들 수 있습니다.

 

2. ClaimSet

클레임은 대개 혼자 존재하지 않으며 클레임 집합이라는 그룹으로 구성되는 경우가 많습니다. ClaimSet 클래스는 이러한 클래스의 목록과 각 클레임의 발행자에 대한 참조를 포함합니다.

 

3. AuthorizationContext

권한 부여 컨텍스트는 클레임 집합과 변환 정책의 컨테이너 역할을 합니다. WCF에서는 정적 스레드 방식의 ServiceSecurityContext를 통해 권한 부여 컨텍스트를 사용할 수 있습니다.

 

4. AuthorizationPolicy

클레임 변환은 권한 부여 정책에 따라 이루어집니다. 권한 부여 정책은 클레임 생성 과정의 일부를 담당하며 WCF 내부 클레임 생성이 끝난 후 실행됩니다. 즉 호출자의 자격 증명이 연결된 클레임에 액세스할 수 있다는 것입니다.

 

 

출처: www.kdata.or.kr/info/info_04_view.html?field=&keyword=&type=techreport&page=158&dbnum=128264&mode=detail&type=techreport

반응형