다음을 통해 공유


ClaimsAuthenticationManager, ClaimsAuthorizationManager 및 OriginalIssuer

ClaimsAuthenticationManager

ClaimsAuthenticationManager를 사용하면 들어오는 토큰에서 추출된 클레임을 RP 응용 프로그램이 받기 전에 추가, 수정 및 삭제하는 변환 작업을 수행할 수 있습니다. ClaimsAuthenticationManager는 클레임을 인증할 수 있는 단일 장소를 제공합니다. 이 장소는 ASP.NET과 WCF 응용 프로그램 사이의 일반적인 장소로 여기에서 "이러한 클레임을 작성할 만큼 신뢰할 수 있는 발급자인가"라는 질문을 던질 수 있습니다.

들어오는 클레임을 가로채기 위해 ClaimsAuthenticationManager에서 파생되는 클래스를 만들고 이 클래스의 유일한 메서드인 Authenticate를 재정의합니다. RP 응용 프로그램이 토큰에서 추출된 클레임을 받기 직전에 WIF에서는 이 메서드를 호출하고 들어오는 토큰에서 추출된 클레임이 들어 있는 ClaimsIdentityCollection을 전달합니다. 이 컬렉션을 수정한 다음 메서드에서 반환할 수 있습니다. 그러면 RP 응용 프로그램은 수정된 클레임 컬렉션을 받습니다.

ClaimsAuthenticationManager를 사용하려면 RP 응용 프로그램 구성 파일에 추가하거나 ServiceConfiguration 개체의 ClaimsAuthenticationManager에서 설정해야 합니다. ServiceConfiguration 개체에 대한 자세한 내용은 구성을 참조하십시오.

ClaimsAuthorizationManager

ClaimsAuthorizationManager는 들어오는 요청을 RP 응용 프로그램이 받기 전에 이를 승인하거나 거부하는 단일 장소를 제공합니다. 이 장소는 "요청자가 이 리소스에 대해 이러한 작업을 수행하도록 허용하겠는가"라는 질문을 던지는 장소입니다.

들어오는 요청을 가로채기 위해 ClaimsAuthorizationManager에서 파생되는 클래스를 만들고 이 클래스의 유일한 메서드인 CheckAccess를 재정의합니다. AuthorizationContext 매개 변수는 다음과 같은 멤버를 포함하고 있습니다.

  1. Action: 작업을 나타내는 Claim의 컬렉션

  2. Principal: 요청자의 IClaimsPrincipal

  3. Resource: 리소스를 나타내는 Claim의 컬렉션

AuthorizationContext.ActionClaimsPrincipalPermission.Operation에 해당하지 ClaimsPrincipalPermission.SecurityAction에 해당하지 않습니다. AuthorizationContext.ResourceClaimsPrincipalPermission.Resource에 해당합니다.

ClaimsAuthorizationManager를 사용하려면 RP 응용 프로그램 구성 파일에 추가하거나 ServiceConfiguration 개체의 ClaimsAuthorizationManager에서 설정해야 합니다. ServiceConfiguration 개체에 대한 자세한 내용은 구성을 참조하십시오.

WCF 서비스 끝점의 경우 ClaimsAuthorizationManager에 전달되는 리소스는 대개 끝점 URI입니다. 다음 끝점은 여기에 해당합니다.

  1. WCF 서비스

  2. POST 메서드로 호출되는 REST 서비스

  3. POST 메서드로 호출되는 ClaimsAuthorizationModule을 포함하는 ASP.NET 응용 프로그램

다음 끝점은 여기에 해당하지 않습니다.

  1. GET 메서드로 호출되는 REST 서비스

  2. GET 메서드로 호출되는 ClaimsAuthorizationModule을 포함하는 ASP.NET 응용 프로그램

끝점 URI를 기반으로 요청을 승인하거나 거부하려는 경우 엄격한 문자열 비교를 수행해서는 안 됩니다. URI는 요청 문자열 쿼리 매개 변수에 따라 요청별로 다르기 때문입니다.

또한 비동기 콜백 메서드에서는 승인 결정을 할 수 없습니다. 이러한 메서드에 대해서는 ClaimsAuthorizationManager가 호출되지 않기 때문입니다. Beginxxx 메서드에서는 승인 결정을 할 수 있지만 비동기 콜백 또는 Endxxx 메서드에서는 승인 결정을 할 수 없습니다.

OriginalIssuer

RP(신뢰 당사자) 응용 프로그램이 원래 클레임을 발급한 STS를 기반으로 정책 결정을 해야하는 경우 OriginalIssuer 속성을 사용할 수 있습니다. 이 속성은 클레임이 포함된 토큰을 발급하는 STS(보안 토큰 서비스)에 의해 설정됩니다.

예를 들어 RP가 해당 RP-STS(신뢰 당사자 STS)에서 토큰을 받는다고 가정합니다. RP-STS는 여러 IP-STS(ID 공급자 STS)를 신뢰합니다. RP는 해당 RP-STS를 신뢰하므로 결과적으로 IP-STS도 신뢰하게 됩니다. 하지만 RP는 RP-STS 또는 IP-STS 중 하나가 원래 발급한 클레임이 토큰에 포함되어 있는지 여부를 기반으로 정책 결정을 내려야 합니다. 이렇게 하려면 OriginalIssuer 속성을 사용합니다.

OriginalIssuer 속성의 값은 암호를 사용하여 확인할 수 없습니다. 따라서 이 값을 사용하여 정책 결정을 내릴 수는 있지만 보안과 관련된 결정을 내릴 수는 없습니다.

참고

위임 체인의 STS는 이러한 클레임이 포함된 다른 토큰을 발급하는 동안 수신된 모든 클레임에서 OriginalIssuer의 값을 유지해야 합니다.