如何保持Auth-Cookie和(ASP.NET)会话同步?

时间:2016-04-14 09:05:39

标签: asp.net session authentication cookies asp.net-core

我们正在开发一个ASP.NET vNext项目,我们正在实现简单的基于cookie的身份验证。

我们考虑过使用auth-cookie来验证用户是否经过身份验证。它是这样创建的:

HttpContext.Authentication.SignInAsync();

用户对象本身将保存到会话缓存(ISession)。

  • 这是一种可以使用的做法,还是我们以完全错误的方式思考这个问题?
  • 如果基本想法是正确的,我们如何保持auth-cookie和会话同步? (会话缓存中具有用户对象的未经身份验证的用户会很糟糕)

请注意,不仅应将用户对象存储在会话中。应该存储大量信息(仅当用户通过身份验证时)。

感谢您的投入!

1 个答案:

答案 0 :(得分:1)

考虑到您的要求,您可以选择使用Cookie middleware在请求之间保留用户,并使用Claims-based authorization保留您想要记住的有关用户的其他信息吗?

因此,在Configure方法的Startup类中,您可以添加cookie中间件,例如:

            app.UseCookieAuthentication(options =>
        {
            options.AuthenticationScheme = "Cookies";
            options.AutomaticAuthenticate = true;
            options.AutomaticChallenge = true;
            options.LoginPath = new PathString(@"/account/login");
            options.AccessDeniedPath = new PathString(@"/account/accessdenied");

        });

然后在ConfigureServices中,您可以设置所需的声明,例如:

   services.AddAuthorization(options =>
{
    options.AddPolicy("EmployeeOnly", policy => policy.RequireClaim("EmployeeNumber"));
});

请考虑链接以获取有关如何进行此设置的完整文档。