我正在尝试理解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是有效的?
答案 0 :(得分:1)
在此设置中,服务器上没有任何内容。 Cookie包含完整的序列化加密的ClaimsPrincipal和AuthenticationProperties。
如果身份过大,可以使用与您描述的一样的参考模式。在这种情况下,您需要设置数据存储。没有提供默认实现。 https://github.com/aspnet/Security/blob/5b29bced0d2f1cfc78843bcd9ec9a828c6fb5fef/src/Microsoft.AspNetCore.Authentication.Cookies/CookieAuthenticationOptions.cs#L138