2011-10-03 3 views
2

내가 MVC에서 AuthorizeAttribute 같은 것을 찾고 있어요 뭔가 I는 다음과 같이 사용할 수 있습니다WCF REST에서 연산 필터와 같은 것이 있습니까?

[WebGet(UriTemplate = "data/{spageNumber}")] 
    [WebCache(CacheProfileName = "SampleProfile")] 
    [WcfAuthorize] 
    public IEnumerable<SampleItem> GetCollection(String spageNumber) 
    { 
     Int32 itemsPerPage = 10; 
     Int32 pageNumber = Int32.Parse(spageNumber); 
     return Enumerable.Range(pageNumber * itemsPerPage, itemsPerPage) 
         .Select(i => SampleItem.Create(i)); 
    } 

WcfAuthorizeAttribute 즉,있는 FormsAuthentication하여 사용자를 인증하기 위해 시도하고 설정 문맥의 IPrincipal를, 또는 HTTP를 반환합니다 (401) 무단으로.

나는 IOperationBehavior으로 시도했지만, 첫 번째 방법에서 실행됩니다. 그 중 어떤 방법이든, 나는 속성을 설정하지 않았습니다.

어떻게 WCF REST에서이를 수행 할 수 있습니까?

감사합니다.

추신 : Starter Kit에서 RequestInterceptor 예제를 보았습니다.하지만 원하는 것은 일부 메소드에만 들어 있으며 예제는 모든 조작에서 실행되는 필터처럼 보입니다.

답변

1

AOP을 사용하면이 작업을 수행 할 수 있습니다. 이 기능을 구현하기 위해 AOP 도구로 PostSharp을 사용했습니다. sample on their website도 있습니다. OnMethodEntry은 메서드 (이 특성으로 장식되어 있음)가 실행되기 전에 실행되고 거기에서 유효성 검사를 수행 할 수 있습니다.

나는 이것을 테스트하기 위해 간단한 샘플을 작성했으며 효과가 있었다.

[Serializable] 
[ProvideAspectRole(StandardRoles.Security)] 
public class WcfAuthorizeAttribute : OnMethodBoundaryAspect 
{ 
    public override void OnEntry(MethodExecutionArgs args) 
    { 
     //extract forms authentication token here from the request and perform validation. 
    } 
} 

다음과 같이 WCF 메소드를 꾸밀 수 있습니다.

[ServiceContract] 
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)] 
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)] 
public class Service1 
{ 
    [WcfAuthorize] 
    [WebGet(UriTemplate = "")] 
    public List<SampleItem> GetCollection() 
    { 
     return new List<SampleItem>() { new SampleItem() { Id = 1, StringValue = "Hello" } }; 
    } 
관련 문제