2014-06-19 3 views
0

도메인별로 WCF 서비스 (IIS에서 호스팅되는 웹)를 분리했습니다. ClaimsAuthorizationManager를 추가하고 CheckAccess 메서드를 재정 의하여 일부 보안 기반 보안을 추가했습니다. Basicaly, 우리는 ClaimsPrincipal이 메소드를 실행하는 데 필요한 권한을 가지고 있는지 확인합니다. ClaimsAuthorizationManager 내부모든 WCF 호출에 추가 매개 변수 추가

public DemandePaeDto ObtenirInfoDemandePAE(int idPreDemande, int numeroSequencePreDemande) 
    { 
     if (!ClaimsPrincipal.Current.CheckAccess(Management, "DoSomething")) 
      return null; 

: 서비스 방법 내부

우리가 다른 테스트 도구의 WCF 스톰과 서비스의 기능을 테스트 할 때

public class FacadeClaimsAuthorizationManager : ClaimsAuthorizationManager 
{ 
    public override bool CheckAccess(AuthorizationContext context) 
    { 
     var user = context.Principal; 
     var resource = context.Resource.First().Value; 

     foreach (var action in context.Action) 
     { 
      switch (resource) 
      { 
       case "Management": 
       case "Sales": 
       case "Product": 
        if (user.HasClaim(OurOwnCustomClaimTypes.Permission, action.Value)) 
        { 
         return true; 
        } 
        break; 
       //Pour les cas non gérés 
       default: 
        return false; 
      } 
     } 

     return false; 
    } 
} 

문제는, 보안 모드를 false로 설정 했으므로 클레임이 없습니다. 따라서 모든 호출에 맞춤 매개 변수를 추가하고 싶습니다. 그렇게하면 CheckAccess 메서드에서 true를 반환하여 우회 할 수 있습니다. MessageInpectors에 대해 생각해 보았지만 여전히 올바른 접근 방법인지 궁금해하고 있습니다. 계약서에 param을 추가하고 싶지는 않습니다. 애플리케이션의 모든 호출을 수정해야하기 때문입니다.

의견이 있으십니까?

답변

0

테스트에 다른 ClaimsAuthorizationManager을 사용해야합니다. 다른 버전을 파생시키고 테스트 환경에서 사용하십시오. 예를 들어 모든 호출에서 true를 반환 할 수 있습니다.

+0

ClaimsAuthorizationManager에서 true를 반환하는 것이 목표이지만이 환경에서 UI를 테스트하기 때문에 그대로 유지해야합니다. UI 사용에 영향을주지 않고 서비스 만 테스트해야합니다. –

+0

서비스의 다른 권한 부여 관리자에 대해 테스트 할 수있는 UI에 어떤 종류의 UI가 영향을 미치는지 나는 알 수 없습니다. 설명 할 수 있니? – nvoigt

+0

UI에서 보안 테스트를 위해 실제 ClaimsAuthorizationManager를 계속 사용하고 싶습니다. 하지만 우리가 서비스 만 테스트 할 때 나는 그것을 원하지 않습니다. –