我正在用Razor语法在ASP.Net MVC 4上开发一个web应用程序。我必须将其部署到云上,可能是Azure。我对login scheme of MVC感到非常困惑。我们必须在多个schemas上工作,这就是为什么我们不使用ASP.Net提供的membership。
我知道会话维护,我在web表单中使用过它,但是会话在云方面有一些严重的问题。
保存用户名和会话数据的最佳方法是什么?
发布于 2013-11-14 16:39:40
我会避免使用会话状态来存储用户信息甚至会话数据,因为这会降低应用程序的可伸缩性。
如果您要存储用户名、显示名称、电子邮件地址...我建议使用基于声明的身份验证。Brock写了一篇很棒的入门文章:Replacing forms authentication with WIF’s session authentication module (SAM) to enable claims aware identity。
其主要思想是分发一个cookie (就像表单身份验证一样):
Claim[] claims = LoadClaimsForUser(username);
var id = new ClaimsIdentity(claims, "Forms");
var cp = new ClaimsPrincipal(id);
var token = new SessionSecurityToken(cp);
var sam = FederatedAuthentication.SessionAuthenticationModule;
sam.WriteSessionTokenToCookie(token);这个cookie代表一个ClaimIdentity,它可以包含一个或多个声明,如电子邮件地址等。
private Claim[] LoadClaimsForUser(string username) {
var claims = new Claim[]
{
new Claim(ClaimTypes.Name, username),
new Claim(ClaimTypes.Email, "username@company.com"),
new Claim(ClaimTypes.Role, "RoleA"),
new Claim(ClaimTypes.Role, "RoleB"),
new Claim(OfficeLocationClaimType, "5W-A1"),
};
return claims; }就会话数据而言,您可能希望考虑Windows Azure角色内缓存或Windows Azure缓存服务。甚至还有一个会话状态提供程序可以将会话状态存储在缓存中:http://msdn.microsoft.com/en-us/library/windowsazure/gg185668.aspx。
但是,您可以通过使用缓存键轻松地自己完成此操作,而无需使用会话状态,如下所示:
myCache.Put(user.Id + "_Friends", friendsList);https://stackoverflow.com/questions/19972477
复制相似问题