2012-10-07 2 views
0

클라이언트 - 서버 응용 프로그램의 경우, 주로 응용 프로그램 자체에서 사용할 웹 서비스를 개발하고 싶습니다 (현재 제 3 자용으로 사용하지 않음).서비스 방법을 통한 맞춤 인증?

그러나 장기적으로 WebService를 일종의 API로 노출하는 것이 일반적으로 바람직합니다. 따라서, 나는 이미 RESTifing (끔찍한 단어 생성, 나는 알고있다 ;-)) 웹 서비스를 나중에 쉽게 사용할 수있는 기술을 선택하는 데 몇 가지 생각을하고있다.
WCF는 webHttpBinding뿐만 아니라 LAN 및 .NET 클라이언트를 활용할 수있는 다른 바인딩을 제공하기 때문에 여기있는 것처럼 보입니다.

나는 이제 인증 문제에 대해 다루었습니다. WCF가 제공하는 모든 인증 조치는 실제 서비스의 "외부"에서 발생하는 것 같습니다. 그러나 Login 메서드 (또는 here under point 2과 같이 좀 더 "RESTful"메서드)를 갖고 싶습니다. 예를 들어

, 나는 이와 같은 서비스를 쓰는 상상 :

[ServiceContract] 
public interface IUserService 
{ 
    [ServiceMember] 
    [WebInvoke(Method = "POST", WebUri="/Session")] 
    public void Login(string username, string password); 

    [ServiceMember] 
    [WebInvoke(Method = "POST", WebUri="/Users")] 
    public void Register(RegisterUserParameter parameter); 
} 

어떻게 그렇게 방법은 바람직 내 서비스 프로젝트에 여러 하위 서비스를 통해 작동 WCF에이 서비스를 통합 할 수 있습니까?

내장 된 WCF 인증을 사용할 때 서비스 호출을하기 전에 사용자 이름과 암호를 제공해야합니다. 따라서 인증되지 않았기 때문에 Register 또는 Login으로 전화하는 것이 실패합니다.

그리고 내 서비스 방법을 사용하여 현재 어떤 사용자가 로그인했는지 기억할 수있는 방법은 무엇입니까? 클라이언트의 WCF 세션 내에 세션 쿠키와 같은 것을 저장할 가능성이 있습니까?

아니면 일반적으로 WCF에서 인증하려는 것을 알고있는 것이 좋지 않습니까?

내 클라이언트 응용 프로그램에서 서비스와 더 복잡한 방식으로 대화하는 대신 WebAPI를 직접 선택해야합니까?

답변

0

Forms 인증과 같은 외부 인증을 사용하면 쉽게 목표를 달성 할 수 있다고 생각합니다. 단지 양식은 응답의 쿠키를 추가 할 가정되는 로그인 방법 -

생각은 오프라인 제외하고 PrincipalPermission 속성을 가진 모든 방법을 보호하는 것입니다.

있는 기술적 인 정보

내 블로그 게시물 중 하나를 여기에서 찾을 수 있습니다 :

http://netpl.blogspot.com/2010/04/aspnet-forms-authentication-sharing-for.html

내가 거기 클라이언트로 실버 라이트를 언급하지만,이 솔루션은 일반적이며 모든 클라이언트 기술에 적용됩니다. 또한 메서드는 블로그 게시물에 언급되어 있지 않지만 그 유일한 목적은 Forms 쿠키를 응답에 추가하는 것입니다.

이렇게하면 클라이언트의 제어 흐름은 먼저 로그인 메서드를 호출 한 다음 쿠키를 사용하여 다른 모든 메서드를 호출하는 것입니다.

이것은 Http 바인딩에서만 작동하므로 가능한 Wcf 바인딩에 대한 일반적인 해결책이 아님에 유의하십시오.

0

는 다음을 시도 할 수 있습니다 :

  1. 는 WCF 로그인 비밀번호 인증으로 로그인 서비스를 만듭니다. 예 : UserNamePasswordValidator의 하위 클래스를 사용하여 DB 등에 대한 username-password의 유효성을 검사합니다. 유효성 검사가 성공적이면 토큰 (예 : GUID)을 반환합니다.

  2. 다른 모든 서비스 요청은이 토큰과 함께 클라이언트에서 수행됩니다. 토큰 확인은 각 서비스를 수정하지 않고 중앙에서 수행 할 수 있습니다. 이렇게하려면 :

    • 이 IDispatchMessageInspector을 구현 요청의 헤더에 토큰을 전달, 그 AfterReceiveRequest에서 헤더에서 토큰을 읽고 그것을 확인합니다.


      : 유효성 검사가 성공하면이 오류 예외
    • 가 발생하지 않을 경우, 워크 플로우 가
    • 는 검증이 필요 서비스에 MessageInspector을 첨부하여 WCF 서비스 내에서 이동합니다

      ...