2

我正在完成啓動另一個程序員的項目。改變整個架構是不可能的,但有些事情我想覆蓋。即 - 授權和存儲當前用戶會話的方式。 該項目表示通過soap服務與服務器進行通信的客戶端。在服務器上,有安全服務和其他幾種服務,例如A服務,B服務。 安全服務提供使用初始化的其他服務的認證和會話密鑰。 該項目是用ASP.NET MVC3編寫的,用戶模型的頭部是以singletone-Class的形式實現的,該類描述了與服務交互的方法。 授權如何工作 - CustomMembershipProvider具有覆蓋的ValidateUser方法,該方法在Security-service上運行。如果成功授權時,用戶註冊在asp.net - FormsService.SignIn(model.UserName,假),然後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" /> 

設置SqlServer的模式是有問題的,因爲這將是困難的SiteUser系列化。我怎樣才能解決這個問題? 授權方面存在問題 - 如何通過服務會話正確執行Asp.Net同步會話? 對不起,我的英文,如果需要澄清 - 提出問題。謝謝。

回答

1

我個人比較喜歡簡單的東西,因此,如果我能,我將有一個專門的用戶使用的服務,所以你不必冒充用戶下來,因此必須維護一個會話密鑰的服務層。

話雖如此,並不總是可能的,尤其是在SOA SOA環境中,服務層確實向第三方提供服務和審計等。實際上,我的項目看起來像這樣。

如果您需要將用戶模擬到服務層,則無法避開會話。 是InProc會議提供了更好的性能的SqlServer 模式提供了更好的可擴展性 - 決定在權衡是你的。

有一個替代將用戶會話密鑰存儲在用戶表本身中,並且每次都檢索並在用戶註銷時無效。但是這只是用戶會話的自定義執行

+0

感謝您的諮詢與會議,你可以告訴授權?我不喜歡它現在如何實現 - 我知道用戶只有在試圖獲得它時才被授權。有了這個,如果在服務中發生錯誤,我知道這不是馬上 – Boo 2011-05-09 12:49:49

+0

授權可以在服務層或ASP NET MVC。如果是SOA,則必須位於服務層。它會將用戶會話密鑰映射到用戶,並檢查它是否有權訪問。 – Aliostad 2011-05-09 12:54:08

+0

你能給出一些關於映射會話密鑰的閱讀鏈接嗎? – Boo 2011-05-09 17:51:35