如何用ASP.NET Core 6实现最简洁的登录认证注销流程?

摘要:认证是一个确定请求访问者真实身份的过程,与认证相关的还有其他两个基本操作——登录和注销。ASP.NET Core利用AuthenticationMiddleware中间件完成针对请求的认证,并提供了用于登录、注销以及“质询”的API,本篇文
认证是一个确定请求访问者真实身份的过程,与认证相关的还有其他两个基本操作——登录和注销。ASP.NET Core利用AuthenticationMiddleware中间件完成针对请求的认证,并提供了用于登录、注销以及“质询”的API,本篇文章利用它们使用最简单的代码实现这些功能。(本文提供的示例演示已经同步到《ASP.NET Core 6框架揭秘-实例演示版》) 一、 认证票据 二、基于Cookie的认证 三、 强制认证 四、登录与注销 一、 认证票据要真正理解认证、登录和注销这三个核心操作的本质,就需要对ASP.NET采用的基于“票据”的认证机制有基本的了解。ASP.NET Core应用的认证实现在AuthenticationMiddleware的中间件中,该中间件在处理分发给它的请求时会按照指定的认证方案(Authentication Scheme)从请求中提取能够验证用户真实身份的信息,我们一般将此信息称为安全令牌(Security Token)。ASP.NET Core应用下的安全令牌被称为认证票据(Authentication Ticket),它采用基于票据的认证方式。该中间件实现的整个认证流程涉及图1所示的三种针对认证票据的操作,即认证票据的“颁发”、“检验”和“撤销”。我们将这三个操作所涉及的三种角色称为票据颁发者(Ticket Issuer)、验证者(Authenticator)和撤销者(Ticket Revoker),在大部分场景下这三种角色由同一个主体来扮演。 图1 基于票据的认证 颁发认证票据的过程就是登录(Sign In)操作。用户试图通过登录来获取认证票据时需要提供可用来证明自身身份的凭证(Credential),最常见的用户凭证类型是“用户名 + 密码”。认证方在确定对方真实身份之后,会颁发一个认证票据,该票据携带着与该用户有关的身份、权限及其他相关的信息。 一旦拥有了由认证方颁发的认证票据,客户端就可以按照双方协商的方式(比如通过Cookie或者报头)在请求中携带该认证票据,并以此票据声明的身份执行目标操作或者访问目标资源。认证票据一般都具有时效性,一旦过期将变得无效。如果希望在过期之前就让认证票据无效,这就是注销(Sign Out)操作。 ASP.NET的认证系统旨在构建一个标准的模型,用来完成针对请求的认证以及与之相关的登录和注销操作。按照惯例,在介绍认证模型的架构设计之前,需要通过一个简单的实例来演示如何在一个ASP.NET应用中实现认证、登录和注销的功能。 二、基于Cookie的认证我们会采用ASP.NET提供的基于Cookie的认证方案。该认证方案采用Cookie来携带认证票据。为了使读者对基于认证的编程模式有深刻的理解,我们演示的这个应用将从一个空白的ASP.NET应用开始搭建。这个应该会呈现两个页面,认证用户访问主页会呈现一个“欢迎”页面,匿名请求则会重定向到登录页面,我们将这两个页面的呈现实现在如下这个IPageRenderer服务中,PageRenderer类型为该接口的默认实现。
阅读全文