2010-02-15 2 views
2

저는 asp.net mvc, DI, IoC, TDD를 사용하여 약간의 학습 과제로 응용 프로그램을 구축하고 있습니다.ASP.NET은 멤버십을 분리하고 저장소 패턴을 사용합니다.

제 데이터 액세스를 위해 저장소 패턴을 사용하고 있습니다. 이제 멤버쉽을 살펴보고 리포지토리 패턴으로 어떻게 작동하는지 살펴 보겠습니다. 나는 현재 Linq to Sql 저장소를 사용하고 있지만 SQL Server에 회원 가입을 원하지는 않습니다.

둘째, 나는 서비스의 번호로 회원을 분할 찾고 :

  • AuthenticationService - 사용자에게
  • AuthorizationService를 식별 - 그들은
  • PersonalizationService 할 수있는 일 - 프로필을

개인화 서비스는 내 애플리케이션에서 "고객"을 실제로 정의하는 것이며, 각 고객은 Au에 연결된 고유 한 ID/사용자 이름을 갖게됩니다 thenticationService - 따라서 기본 ASP.NET 멤버십 공급자를 사용하거나 내 자신을 굴리거나 Open ID와 같은 것을 사용할 수 있습니다.

좋은 접근 방법입니까? 나는 바퀴를 재발 명하고 싶지는 않지만 오히려 내 응용의이 중요한 부분들은 나머지 부분과 동일한 패턴을 따를 것입니다.

감사 벤

답변

1

RIA Authentication, Roles, and Profiles service의 ..에 바퀴를 재발견 할 필요를 살펴 보자 없습니다.

+0

감사합니다. 내 용서를 용서하지만 RIA가 어떻게 도움이되는지는 알 수 없습니다. 여러 클라이언트를 사용하는 경우 mvc 및 silverlight이 방법이 유용 할 수 있습니다. 그러나 ASP.NET의 표준 멤버십 위에 구축 되었기 때문에 인증 서비스가 내 응용 프로그램에 노출되는 방식은 변경되지만 실제로 작동하는 방식이나 내 모델과 상호 작용하는 방식은 변경되지 않습니다. 당신의 도움을 주셔서 감사합니다. –

0

솔직히 말해서, 내가 원했던 것을 달성하는 것은 꽤 간단한 과정이었습니다. 나는 아직 AuthorizationService를 구현하지 않았지만 비슷한 패턴을 따를 것이다.

public interface IAuthenticationService 
{ 
    bool IsValidLogin(string username, string password); 
} 

createuser가 방법이있을 것입니다하지만 난 아직 구현되지 않은 :

내 인증 서비스는 매우 간단합니다.

public class AspNetAuthenticationService : IAuthenticationService 
{ 
    public bool IsValidLogin(string username, string password) 
    { 
     return Membership.ValidateUser(username, password); 
    } 
} 

난 내 자신과 기본 SqlMembershipProvider을 교환하려는 경우

다음 난 그냥 Web.config를 변경해야합니다 : 표준 멤버 자격 공급자를 사용하여 인증 서비스를 만들기

간단한 작업입니다. 여러 인증 유형 (아마도 auth 및 open id 형식)을 지원하기 위해 각각에 대해 컨트롤러 작업을 만들고 인증 쿠키를 설정하기 전에 적절한 IAuthenticationService.ValidateUser 구현을 호출 할 수 있습니다.

"사용자"를 식별하기위한 인증 프로세스입니다. "고객"을 얻으려면 PersonalizationService를 사용하고 있습니다. 이를위한 인터페이스는 매우 간단합니다.

public interface IPersonalizationService { 
    Customer GetCustomer(string username); 
} 

이렇게하면 내 고객 (주소, 과거 주문 - 우리가 정말로 신경 쓰는 물건)이 반환됩니다. GetCustomer 메서드는 전달 된 사용자 이름이없는 경우 고객 개체를 만듭니다. 표준 양식을 사용하는 경우 인증 과정에서 고객이 생성됩니다. 오픈 아이디 (OpenID)와 같은 것을 사용한다면, 처음으로 고객 오브젝트를 로그인 할 때 오픈 아이디 사용자 이름으로 연결되고 연결됩니다. 따라서 인증 된 "사용자"가 "고객"과 분리 된 이유가됩니다.

이 프로세스는 "guest"고객의 메모리 고객 오브젝트를 작성할 수 있기 때문에 익명의 체크 아웃에도 잘 작동하며, 구매할 경우 데이터베이스에이를 유지합니다. 이 경우 사용자가 없습니다 (인증을하지 않았기 때문에)하지만 고객이 있습니다.

이 구현에 매우 만족합니다. 내 자신의 멤버쉽 공급자를 롤업 할 것입니다. (그리 어려운 일이 아니므로) 데이터 액세스에 저장소 패턴을 사용하고 싶습니다. 이 접근법에 대한 의견이나 제안을 듣고 싶습니다. 내가 사용하고

일부 자원 : 답장을

http://noahblu.wordpress.com/2009/02/19/custom-membershipprovider-using-repository-dependency-injection-pattern-magic/

http://davidhayden.com/blog/dave/archive/2007/10/11/CreateCustomMembershipProviderASPNETWebsiteSecurity.aspx

http://pbdj.sys-con.com/node/837990/mobile

http://mattwrock.com/post/2009/10/14/Implementing-custom-Membership-Provider-and-Role-Provider-for-Authinticating-ASPNET-MVC-Applications.aspx

+0

이것은 Ron Conery가 OpenId를 채택하기 위해 표준 ASP.NET 멤버십을 리팩토링 할 때 사용 된 접근 방식과 같습니다 (http://www.asp.net/mvc/videos/aspnet-mvc-storefront-part-16- membership-redo-with-openid) 나는 꽤 좋아했습니다. 내가 고민했던 (아직까지는) 한 가지는 OpenId를 통해 사용자를 인증하면 ASP.NET 멤버십 테이블에 항목을 생성합니까? 아니면 별도의 테이블을 유지 하시겠습니까? 네가 한 일에 관심이있어. – James

+1

@James - 사용자 (인증) 및 프로필 (개인 설정)을 기반으로 작업 할 때 우리는 내부 인증 시스템에 대한 별도의 테이블과 프로필에 대한 별도의 테이블을 갖게됩니다. 프로파일은 인증 사용자 이름에 대한 참조를 보유합니다. 내부 사용자 테이블의 사용자 이름이거나 openid 소유권 주장 URL 일 수 있습니다. 사용자가 인증하는 방법에 관계없이 프로필을로드 할 수 있다는 아이디어가 있습니다. 희망은 그 말이 맞습니다. –

관련 문제