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