其核心方法HandleAuthenticateAsync会检查请求Cookie,查找与CookieBuilder.Name对应的Cookie值,解密反序列化成AuthenticationTicket对象,最后在上一章介绍的AuthenticationMiddleware中间件中将Principal赋予给HttpContext。
而CookieAuthenticationHandler还实现了IAuthenticationSignInHandler和IAuthenticationSignOutHandler,这也是ASP.NET Core中内置的唯一支持登录和退出的认证方式。在SignInAsync方法中使用ClaimsPrincipal来创建一个AuthenticationTicket对象,然后将其加密,写入到Cookie中,便完成了登录(身份令牌的发放),而SignOutAsync方法则只是简单的删除Cookie。
篇幅有限,就不再多说,感兴趣的可以去看一下完整代码:CookieAuthenticationHandler。
总结Cookie认证是一种本地认证方式,也是最为简单,最为常用的认证方式。其认证逻辑也很简单,总结一下就是获取请求中指定的Cookie,解密成功后,反序列生成 AuthenticationTicket 对象,并进行一系列的验证,而登录方法与之对应:根据用户信息创建 AuthenticationTicket 对象,并加密后序列化,写入到Cookie中。在下一章中,就来介绍一下最为流行的远程认证方式:OAuth 和 OpenID Connect。