ASP.NET Core如何知道cookie在cookie身份验证中有效?

时间:2017-08-24 23:10:00

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

我正在尝试理解cookie身份验证,尤其是对于ASP.NET Core。据我所知,cookie身份验证通常如何工作,会话ID存储在服务器端和客户端。发出请求时,将发送会话ID,并在服务器端检查会话ID。

我使用以下代码在ASP.NET Core中尝试了cookie身份验证中间件:

app.UseCookieAuthentication(new CookieAuthenticationOptions
{
   AuthenticationScheme = CookieAuthenticationDefaults.AuthenticationScheme,
   AutomaticAuthenticate = true
});

在AccountController中,登录后:

var myUser = GetUser(email, password);
var claims = new List<Claim>
{
   new Claim(ClaimTypes.Name, myUser.Name)
};
var props = new AuthenticationProperties
{
   IsPersistent = persistCookie,
   ExpiresUtc = DateTime.UtcNow.AddYears(1)
};

var identity = new ClaimsIdentity(claims, CookieAuthenticationDefaults.AuthenticationScheme);
await HttpContext.Authentication.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme, new ClaimsPrincipal(identity), props);

我看到cookie在浏览器中,但是它存储在服务器端的哪个位置?我以为我需要将它存储在数据库中以检查是否有效,但它似乎已经存储在某处,因为我还没有完成任何数据库代码。另外,ASP.NET Core如何知道传递的cookie是有效的?

1 个答案:

答案 0 :(得分:1)

在此设置中,服务器上没有任何内容。 Cookie包含完整的序列化加密的ClaimsPrincipal和AuthenticationProperties。

如果身份过大,可以使用与您描述的一样的参考模式。在这种情况下,您需要设置数据存储。没有提供默认实现。 https://github.com/aspnet/Security/blob/5b29bced0d2f1cfc78843bcd9ec9a828c6fb5fef/src/Microsoft.AspNetCore.Authentication.Cookies/CookieAuthenticationOptions.cs#L138