由于HTTP协议是无状态的,但对于认证来说,必然要通过一种机制来保存用户状态,而最常用,也最简单的就是Cookie了,它由浏览器自动保存并在发送请求时自动附加到请求头中。尽管在现代Web应用中,Cookie已略显笨重,但它依然是最为重要的用户身份保存方式。在 上一章 中整体的介绍了一下 ASP.NET Core 中的认证流程,而未提及具体的实现方式,较为抽象,那本章就通过一个完整的示例,以及对其原理的解剖,来详细介绍一下Cookie认证,希望能帮助大家对 ASP.NET Core 认证系统有一个更深入的了解。
目录
示例我们从零开始,一步一步来创建一个完整的 ASP.NET Core Cookie认证的详细示例。
创建项目我们首先创建一个空的 .NET Core 2.0 Web 项目:
在创建的空项目中,默认具有如下引用:
<ItemGroup> <PackageReference Include="Microsoft.AspNetCore.All" Version="2.0.0" /> </ItemGroup>Microsoft.AspNetCore.All 是 ASP.NET Core 的全家桶,包含 Mvc, EFCore, Identity, NodeService, AzureAppServe 等等,并集成到了 .NET Core SDK 当中,个人感觉略坑,有违 .NET Core 轻量模块化的理念,虽然使用看似更加方便了,却也让我们变得更加傻瓜化。在本文中为了更好的演示,就移除掉 Microsoft.AspNetCore.All 的引用,然后手动安装需要的Nuget包,当然,你可以不这么做,并略过此小节。
在本章中,会用到以下几个项目中的Nuget包:
HttpAbstractions, ASP.NET Core的核心项目,我们的每一个应用程序都需要引用该项目。
Hosting, ASP.NET Core应用程序的宿主程序,必须引用。
KestrelHttpServer, 最常用的Web服务器,支持跨平台,在Windows下还可以使用HttpSysServer或IISIntegration。
Logging,用来记录日志,可将日志输出到控制台,调试窗口,Windows事件日志等。
Security,ASP.NET Core 认证系统,包括Cookies, JwtBearer, OAuth, OpenIdConnect等。