我正在完成启动另一个程序员的项目。改变整个架构是不可能的,但有些事情我想覆盖。即 - 授权和存储当前用户会话的方式。 该项目表示通过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同步会话? 对不起,我的英文,如果需要澄清 - 提出问题。谢谢。
感谢您的咨询与会议,你可以告诉授权?我不喜欢它现在如何实现 - 我知道用户只有在试图获得它时才被授权。有了这个,如果在服务中发生错误,我知道这不是马上 – Boo 2011-05-09 12:49:49
授权可以在服务层或ASP NET MVC。如果是SOA,则必须位于服务层。它会将用户会话密钥映射到用户,并检查它是否有权访问。 – Aliostad 2011-05-09 12:54:08
你能给出一些关于映射会话密钥的阅读链接吗? – Boo 2011-05-09 17:51:35