2011-03-08 3 views
6

웹 사이트를 다시 작성하고 SOA 접근법을 사용하려고합니다. 현재 웹 사이트는 .NET 2.0이며 SqlMembershipProvider 상자를 사용합니다.C#을 사용하는 SOA 접근 인증

우리는 데이터베이스에 직접 연결을 제거하고 모든 것을 WCF 서비스 계층을 통해 푸시하려고합니다. 우리가 사용하는 접근 방식은 모든 것을 분리시키는 것입니다. 모델과 인터페이스를위한 라이브러리, 서비스를위한 라이브러리, 서비스 프록시를위한 라이브러리가 있습니다.

지금까지 가장 큰 장애물은 사용자 인증 및 세션을 관리하는 방법을 알아내는 것입니다. 이 접근법으로 이것을하는 가장 좋은 방법은 무엇입니까?

.NET 멤버십 모델을 스크랩하고 OpenId와 같이 사용해야하며 사용자가 새 계정에 데이터를 다시 연결할 수 있도록 허용해야합니까?

검색 작업을 많이 해본 결과이 작업을 관리하는 방법을 많이 찾지 못했습니다.

답변

1

내가 관심을 끌었을 때, 내가 끝내었던 것은 여기에있다. WCF 인증 서비스를 사용하기 시작했으나 원하는 모든 것을 제공하지 못한다는 것을 깨달았습니다.로그온 및 로그 오프 할 수는 있지만 등록 및 회원 가입 방법을 직접 작성해야합니다.

그래서 ServiceContracts 라이브러리에 가서 IMembership이라는 인터페이스를 만듭니다. 처음에는 클래스로 생성하고 MembershipProvider에서 상속 받았기 때문에 모든 스텁이 생성되었습니다. 일단 생성되면 스텁을 수정하여 인터페이스로 만들었습니다.

그런 다음 내 서비스 라이브러리로 가서 구현을 위해 난 그냥 Membership.Provider을 사용했기 때문에, 간단했다 인터페이스의 구현 .... 내 서비스 제공자 클라이언트 라이브러리에서 다음

을 만들어, 내가 그랬어 IMembership 인터페이스의 일반적인 구현이며 ClientBase <>을 상속합니다. 바로 옆에 MembershipProvider를 구현 한 WCFMembershipProvider를 만들고 방금 만든 MembershipClient에서 메서드를 호출했습니다.

WCF 서비스를 호스팅하는 웹 응용 프로그램에서 web.config에서 SQL 멤버십 공급자를 설정 한 다음 서비스에 대한 내 svc 파일과 끝점을 만들었습니다.

소비 웹 응용 프로그램에서 서비스 클라이언트 참조를 svc에 추가 한 다음 내 WCFMembershipProvider의 멤버 자격 공급자를 설정합니다.

비올라 - 저는 사업을합니다.

반복적 인 코드가 많지만 잘 작동합니다.

+0

아마 이것 좀 더 추상화 할 수는 있겠지만, 지금 당장 필요로하는 부분에 대해서는 효과가 있습니다. – Doug

0

WCF 서비스를 만들고 세션 상태를 유지하려고 할 때 주된 문제는 쿠키를 유지 관리 할 브라우저가 없기 때문입니다. 따라서 .NET 멤버 자격 공급자는 아닙니다. 대단히 도움이 될 것입니다. 내가 동등한 문제를 처리 한 방법은 생성 된 토큰 (예 : Guid)을 유지 관리해야하는 상태 정보와 일치시키는 것입니다.

그러나 인증에 대한 자세한 내용은 질문입니다. WCF를 통해 OpenId 구현 작업을 할 수 있다는 것을 알지 못합니다. (예전의 ASPX에서는 훌륭하게 작동합니다.) 간단한 사용자 이름/암호 인증 체계 (데이터베이스에서 암호 암호화를 처리하는 데 필요한 경우 MembershipProvider를 수동으로 사용할 수도 있음)를 사용할 수 있으며 (가장 가능성있는) 전송을 사용하여 서비스를 통해 사용자 이름과 암호를 전달할 수 있습니다 보안 (SSL).

다소 도움이 되었기를 바랍니다. 어쩌면 누군가 WCF에 대한보다 표준적인 세션 상태 교체를 생각해 냈을 수도 있지만, 그렇다면 나는 그것에 대해 알지 못한다.

0

원하는 설정에 대해 조금 더 알지 못해도 특정 답변을 제공하기가 어렵습니다.

WCF 서비스를 웹 사이트와 별도로 공개적으로 볼 수 있도록 계획 하시겠습니까? 웹 페이지가 AJAX를 통해 WCF 서비스에 직접 액세스합니까?

가장 쉬운 시나리오는 엄격한 계층화 된 배포 UI가 웹 사이트에만, 웹 사이트는 WCF 서비스와 만 대화하는 것일 수 있습니다.

http://msdn.microsoft.com/en-us/library/ms731049.aspx은 WCF와 함께 ASP.NET 멤버십 모델을 사용할 때 유용합니다.

나는 AJAX를 사용하여 WCF 서비스 계층과 통신하는 사이트를 만들었습니다. WCF에서 폼 인증 공급자를 사용했습니다. 웹 서비스를 통해 로그인을 처리하는 데 좋은 방법이 없다는 점을 제외하고는 정상적으로 작동했습니다. 우리의 경우 사용자가 웹 사이트로 이동하여 자격 증명을 입력하여 로그인하기를 원했기 때문에 문제가되지 않았습니다.

SQLMembership 공급자와 작업하기 위해 사용자 자격 증명을 수집하는 데 이미 투자 한 경우 ADFS + 클레임 기반 모델을 통해 설명 할 수 있습니다. 위 시나리오 중 3 가지 모두와 함께 작동합니다. 그래도 할 일이 조금있다.

+0

글쎄, 기본적으로 달성하고자하는 것은 SQL 멤버 자격 공급자를 WCF 멤버 자격 공급자로 바꾸는 것입니다. 내 DMZ에서 내부 SQL 서버에 대한 모든 직접 연결을 제거하고 서비스 만 사용하려고합니다. WCF와 함께 제공되는 인증 서비스를 살펴 보았지만 서비스를 배치하고 명령 줄 도구를 사용하여 프록시를 만들지 않고 내 클라이언트 프록시 라이브러리에 구현하는 쉬운 방법이 아닌 것 같습니다. 피하고 싶다. 나는 인증을 위해 내 서비스를 만들고 그 서비스와 상호 작용할 커스텀 공급자를 만드는 것으로 끝날 것이다. – Doug

+0

귀하의 답변에 근거한 질문입니다. 웹 사이트 만 WCF 서비스와 통신해야하는 경우 모든 웹 서비스 호출에서 인증에 사용하기 위해 사용자의 자격 증명을 사용하려는 이유는 무엇입니까? 이것은 본질적으로 (예를 들어) 세션 변수에 사용자 비밀번호를 저장하고 모든 서비스 호출에 전달해야 함을 의미합니다. – Naraen