2

다른 프로그래머가 시작한 프로젝트를 마무리 중입니다. 전체 아키텍처를 변경할 수는 없지만 일부는 덮어 쓰려고합니다. 즉, 권한 부여 및 현재 사용자 세션을 저장하는 방법. 프로젝트는 soap-services를 통해 서버와 통신하는 클라이언트를 나타냅니다. 서버에는 보안 서비스 (Security-Services)와 A 서비스, B 서비스와 같은 여러 서비스가 있습니다. 보안 서비스는 초기화 된 다른 서비스와 함께 인증 및 세션 키를 제공합니다. 프로젝트는 서비스와 상호 작용하는 방법을 설명하는 singletone-Class로 구현 된 사용자 모델의 머리 인 ASP.NET MVC3으로 작성되었습니다. 인증 작동 방식 - 보안 서비스에서 작동하는 재정의 된 ValidateUser 메소드가있는 CustomMembershipProvider가 있습니다. 성공적인 인증은 asp.net에서 사용자 등록을 발생하는 경우 - FormsService.SignIn (model.UserName, false)를 다음 initizalied 사용자 클래스 :ASP.NET MVC 프로젝트 아키텍처 문제 - 인증 및 세션

class SiteUser 
{ 
    public static SiteUser Current 
    { 
     get 
     { 
      if (HttpContext.Current.Session.IsNewSession & &! HttpContext.Current.User.Identity.IsAuthenticated) 
      { 
       throw new UserAutorizationExeption() {Reason = AuthExceptionReason.NewSession}; 
      } 

      if (HttpContext.Current.Session [sessionKey] == null) 
      { 
       FormsAuthentication.SignOut(); 
       throw new UserAutorizationExeption() {Reason = AuthExceptionReason.ServerSessionExpired}; 
      } 

      return HttpContext.Current.Session [sessionKey] as W1User; 

     } 
     set 
     { 
      if (HttpContext.Current.Session! = null) 
      { 
       HttpContext.Current.Session [sessionKey] = value; 
      } 
     } 
    } 

    public SiteUser() 
    { 
    } 


    public static SiteUser Create() 
    { 
     SiteUser.Current = new SiteUser(); 

     return SiteUser.Current; 
    } 

    // Web-services methods go here 
} 

가장 큰 문제는 현재 세션이 메모리에 저장되어 있습니다 : 웹 .config :

<sessionState mode="InProc" timeout="20" /> 

Set SqlServer 모드는 SiteUser serialize가 어려울 수 있으므로 문제가됩니다. 이 문제를 어떻게 해결할 수 있습니까? 인증에 문제가 있습니다 - 서비스 세션에서 Asp.Net 동기화 세션을 올바르게 수행하는 방법은 무엇입니까? 영어로 불편을 끼쳐 드려 죄송합니다. 필요한 경우 질문을하십시오. 고맙습니다.

답변

1

나는 개인적으로 더 단순한 서비스를 선호하므로 서비스를 사용하는 전용 사용자가 있으므로 사용자를 가장하여 서비스 레이어를 가장하여 세션 키를 유지해야합니다.

서비스 레이어가 제 3 자에게 서비스를 제공하고 감사 등을하는 환경에서는 항상 그렇습니다.

서비스 계층에 사용자를 가장해야하는 경우 세션을 가질 수 없습니다. 에서 InProc 세션은 더 나은 성능을 제공SQLSERVER 모드는 더 나은 확장 성 제공 - 무역 오프에 당신입니다 결정.

대체 사용자 테이블 자체에 사용자 세션 키를 저장하고 매 시간마다 검색하고 사용자가 로그 아웃 할 때 무효화하는 대체이 있습니다. 그러나 이것은 사용자 세션의 사용자 정의 구현 인 입니다.

+0

세션에 대한 조언을 주셔서 감사합니다. 인증에 대해 무엇을 알 수 있습니까? 나는 그것이 지금 실현되는 방법을 좋아하지 않습니다. - 사용자가 그것을 얻으 려 할 때만 권한을 부여받지 못한다는 것을 알고 있습니다. 이것으로 서비스에 오류가 발생하면 즉시 알 수 없음을 알고 있습니다. – Boo

+0

서비스 계층 또는 ASP NET MVC에서 권한 부여가 가능합니다. 그것이 SOA라면 서비스 계층에 있어야합니다. 사용자 세션 키를 사용자에게 매핑하고 액세스 권한이 있는지 확인합니다. – Aliostad

+0

당신은 매핑 세션 키에 대해 읽을 수있는 몇 가지 링크를 줄 수 있습니까? – Boo