2016-11-03 2 views
4

ASP.Net 코어에서 IClaimsTransformer 구현을 사용할 수 있습니다.IClaimsTransformer의 용도는 무엇입니까?

는이처럼 등록 :

public class MyClaimsTransformer : IClaimsTransformer 
{ 
    public Task<ClaimsPrincipal> TransformAsync(ClaimsTransformationContext context) 
    { 
     var identity = context.Principal.Identity as ClaimsIdentity; 

     foreach (var claim in ci.Claims) 
     { 
      // you cannot modify claim.Type or claim.Value here 
     } 
    } 
} 

그러나 ClaimsIdentity.Claims이 전용 속성 읽기

app.UseClaimsTransformation(o => o.Transformer = new MyClaimsTransformer()); 

구현. 또한 Claim.Type, Claim.Value은 읽기 전용 속성입니다.

즉, IClaimsTransformer 구현시 새로운 소유권 주장 만 추가 할 수 있습니다. 기존 소유권 주장은 삭제하거나 수정할 수 없습니다.

그래서 IClaimsTransformer의 실제 용도는 무엇입니까?

답변

2

그 가치는 인증 쿠키에 저장된 것 이상으로 클레임을 보완 할 수 있다는 것입니다.

너무 많은 데이터를 잘라내려고하면 너무 많은 데이터 만 쿠키에 들어갈 수 있기 때문에 유용합니다.

많은 페이로드가있는 클레임이나 클레임이 많은 경우 해당 데이터를 세션에 저장하고 클레임 변환을 사용하여 claimsprincipal에 추가 할 수 있습니다. 나는 그것이 쿠키에 저장된 주장을 제거하기위한 것이라고 생각하지 않습니다. 클레임에 포함 된 클레임을 추가하거나 제어하려는 경우 사용자 지정 IClaimsPrincipalFactory에서 수행합니다.

+0

세션에 데이터를 저장하는 경우 HttpContext에서 세션을 사용할 수 있으므로 세션에서 직접 데이터를 읽을 수 있습니다. 왜 나는 클레임에 넣고 클레임에서 읽어야합니까? – LP13

+0

클레임은 다양한 목적으로 사용될 수 있습니다. 한 가지 공통적 인 사용은 권한 policy에 대한 요구 사항을 만족시키는 데 있습니다. 대부분의 경우 claimstranformation이 필요하지 않습니다. 왜냐하면 대부분의 경우 많은 클레임이나 큰 클레임 페이로드를 피할 수 있기 때문입니다.하지만 필요한 경우에는 거기에 있습니다. 당신은 그것을 필요로하지 않을지도 모르지만, 아마도 주로 엣지 케이스의 용도가있을 것입니다. –

+0

@blowdart는 내 것보다 더 나은 대답을 가지고 있습니다. –

4

반환 유형을 확인 했습니까? ClaimsPrincipal입니다.

완전히 새로운 ClaimsPrincipal을 생성하고 기존의 ClaimsPrincipal을 원하는대로 추가하거나 변경하여 반환 할 수 있습니다.

+3

이것이 표준 패턴일까요? 예를 들면 - IdentityServer4를 OIDC 공급자로 사용하여 사용자를 인증하고 id_token을 다시 ASPNET 핵심 응용 프로그램에 제공합니다. 하지만 내 애플 리케이션은 인증 된 사용자가 비즈니스 도메인의 클레임을 가지고 있어야합니다. 일부 비즈니스 서비스를 쿼리 한 후에 Claims Transformation을 사용하여 새 ClaimsPrincipal을 빌드하여 관련 정보를 얻습니다. 아마도 모든 요청에 ​​대해 변환이 실행될 것이므로이 정보를 캐시해야 할 것입니다. 이에 대한 자습서 나 지침이 있습니까? 미리 감사드립니다 .. – jcaddy

+1

@jcaddy 당신이 길을 갔니? 어떤 지침을 찾았습니까? – Larsi

+1

@ Larsi - 아직도이 개념에 어려움을 겪고 있습니다. aspnet 코어의 클레임 변압기가 잘 작동하지 않습니다 - 중복 클레임을 추가하는 것 같습니다. 앱이 비즈니스 클레임에 의존하고 작업을 너무 어렵게하지 않고 권한 결정을 내릴 수 있으므로 우려를 분리하는 것은 좋은 방법입니다.IClaimsTransformer의 다른 문제는 의존성을 주입 할 수 없다는 것입니다. 비즈니스 클레임을 가져올 서비스 또는 저장소. 아이디어 나 모범 사례가 있으면 듣고 싶습니다. https://github.com/aspnet/Security/issues/863 – jcaddy

관련 문제