2012-05-17 2 views
1

우리는 우리 회사에서 다른 개발자 팀을 위해 사용하고자하는 웹 서비스를 제공하고 있습니다. 그래도 우리는 누가 그것을 사용하는지, 그리고 그가이 특정 방법을 호출 할 수 있는지 여부를 제어하려고합니다.웹 메소드 본문 외부의 웹 서비스 인증

따라서 웹 서비스를 사용하려는 각 팀에게이 키를 사용하는 호출자가 호출 할 수있는 메서드를 알려주는 키를 할당하는 솔루션을 제안했습니다. 이 키는 매개 변수로 각 메소드에 전달됩니다. 나는이 같은 모든 메소드의 시작 부분에서 보안 검사를 수행 할 수있는 매개 변수로이 키를 갖는

private bool CanCallMethod(string methodIdentifier, string authenticationKey) 
{ 
    //check in db 
} 

public object GetLocation(string authenticationKey, int param1, string param2) 
{ 
    if (!CanCallMethod(someMethodIdentifier, authenticationKey)) 
     throw new UnauthorizedAccessException(); 
    //method body 
} 

public object SetLocation(string authenticationKey, DateTime param1) 
{ 
    if (!CanCallMethod(someOtherMethodIdentifier, authenticationKey)) 
     throw new UnauthorizedAccessException(); 
    //method body 
} 

을하지만 모든 방법으로 그것을해야 ... 그리고 나는 모든 새로운 방법에 대해 기억해야 그리고 모든 새로운 웹 서비스에서. 질문은 다음과 같습니다.
메서드 클래스의 체크를 명시 적으로 호출 할 때마다 메서드가 호출되지 않을 때이 검사가 수행되도록 클래스를 디자인 할 수있는 방법이 있습니까?
글쎄, 그렇게 생각하지는 않지만 항상 물어볼 가치가있다.

+0

어떤 유형의 웹 서비스입니까? WCF? 평안한? –

답변

0

PostSharp, Unity 또는 Castle과 같은 도구로 AOP를 사용하여 동적 프록시를 가로 채거나 만들 수 있습니다. 이렇게하면 인터페이스를 구현하기 위해 일부 서비스를 재 작업해야 할 수 있습니다. 유니티에 대한 경험이있을 뿐이지 만, 인터페이스로 구현 한 다음 애스펙트로 연결하면 작동 할 수 있습니다.

어쩌면 이것 역시 도움이 될 수 있습니다 : Best free way to use AOP style MVC-like authorization in business logic.