【问题标题】:Session maintenance in cloud application ASP.Net MVC云应用 ASP.Net MVC 中的会话维护
【发布时间】:2013-11-14 08:03:48
【问题描述】:

我正在ASP.Net MVC 4 上使用剃须刀语法开发一个 Web 应用程序。我必须将它部署在云上,可能在 Azure 上。 我对login scheme of MVC 感到很困惑。我们必须处理多个schemas,这就是为什么我们不使用 ASP.Net 提供的membership

我知道会话维护,我在 Web 表单中使用它,但会话在云方面存在一些严重问题。

保存用户名和会话数据的最佳方法是什么?

【问题讨论】:

    标签: asp.net asp.net-mvc asp.net-mvc-4 azure cloud


    【解决方案1】:

    我会避免使用会话状态来存储用户信息甚至会话数据,因为这会降低您的应用程序的可扩展性。

    如果您想存储用户名、显示名、电子邮件地址……我建议使用基于声明的身份验证。 Brock Allen 写了一篇很棒的介绍文章来帮助您入门: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 缓存服务。甚至还有一个 Session State Provider 可以将会话状态存储在缓存中:http://msdn.microsoft.com/en-us/library/windowsazure/gg185668.aspx

    但是您可以通过使用缓存键轻松地自己完成此操作,而无需使用会话状态,如下所示:

    myCache.Put(user.Id + "_Friends", friendsList);
    

    【讨论】:

    • 基于声明的身份验证是 MS 内置类吗?它安全吗?我没有使用 Windows azure 的 Web 和服务器角色,我还能使用缓存服务或会话状态提供程序吗?
    • ClaimsIdentity 和 ClaimsPrinicpal 从 .NET 4.5 开始内置。而且您可以从任何位置使用缓存服务(当您的应用程序不在 Windows Azure 中运行时也是如此)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-28
    • 1970-01-01
    • 2013-11-28
    • 2017-04-10
    • 2018-06-09
    • 1970-01-01
    相关资源
    最近更新 更多