ASP.NET MVC 项目架构问题 — 授权和会话



我正在完成一个启动另一个程序员的项目。改变整个架构是不可能的,但有些东西我想覆盖。即 - 授权和存储当前用户会话的方法。该项目表示通过 soap-services 与服务器通信的客户端。在服务器上,有安全服务和其他几个,例如,A-服务,B-服务。安全服务提供用于初始化其他服务的身份验证和会话密钥。该项目是用 ASP.NET MVC3 编写的,MVC3 是用户模型的负责人,它作为单调类实现,它描述了与服务交互的方法。授权的工作原理 - 有 CustomMemberProvider 和重写的 ValidateUser 方法,该方法在安全服务上运行。如果授权成功,则用户在 asp.net - FormsService.SignIn(模型。用户名,false),然后初始化用户类:

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 
} 

主要问题是现在会话存储在内存中:web.config:

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

设置 SqlServer 模式是有问题的,因为它很难序列化 SiteUser。我该如何解决这个问题?并且授权存在问题 - 如何正确执行与服务会话 Asp.Net 同步会话?对不起我的英语,如果需要澄清 - 提出问题。谢谢。

我个人更喜欢更简单的东西,因此如果可以的话,我会有一个专门的用户来使用这些服务,这样您就不必将用户模拟到服务层,因此必须维护会话密钥。

话虽如此,这并不总是可能的,尤其是在服务层确实向第三方提供服务和审计等的 SOA 环境中。事实上,我的项目看起来像这样。

如果需要将用户模拟到服务层,则无法摆脱会话。InProc 会话提供更好的性能SqlServer 模式提供更好的可伸缩性 - 权衡由您决定。

还有一种替代方法,可以将用户的会话密钥存储在用户表本身中,并在每次检索并在用户注销时失效。但这只是用户会话的自定义实现

相关内容

  • 没有找到相关文章

最新更新