通常在应用程序中,安全分为前后两个步骤:验证和授权。验证负责检查当前请求者的身份,而授权则根据上一步得到的身份决定当前请求者是否能够访问期望的资源。
既然安全从验证开始,我们也就从验证开始介绍安全。
我们先从比较简单的场景开始考虑,例如在 Web API 开发中,需要验证请求方是否提供了安全令牌,安全令牌是否有效。如果无效,那么 API 端应该拒绝提供服务。在命名空间 MicrosoftAspNetCoreAuthentication 下,定义关于验证的核心接口。对应的程序集是 MicrosoftAspNetCoreAuthenticationAbstractionsdll。
在 ASPNET 下,验证中包含 3 个基本 *** 作:
验证 *** 作负责基于当前请求的上下文,使用来自请求中的信息,例如请求头、Cookie 等等来构造用户标识。构建的结果是一个 AuthenticateResult 对象,它指示了验证是否成功,如果成功的话,用户标识将可以在验证票据中找到。
常见的验证包括:
在授权管理阶段,如果用户没有得到验证,但所期望访问的资源要求必须得到验证的时候,授权服务会发出质询。例如,当匿名用户访问受限资源的时候,或者当用户点击登录链接的时候。授权服务会通过质询来相应用户。
例如
质询 *** 作应该让用户知道应该使用何种验证机制来访问请求的资源。
在授权管理阶段,如果用户已经通过了验证,但是对于其访问的资源并没有得到许可,此时会使用拒绝 *** 作。
例如:
拒绝访问处理应该让用户知道:
在这个场景下,可以看到,验证需要提供的基本功能就包括了验证和验证失败后的拒绝服务两个 *** 作。在 ASPNET Core 中,验证被称为 Authenticate,拒绝被称为 Forbid。 在供消费者访问的网站上,如果我们希望在验证失败后,不是像 API 一样直接返回一个错误页面,而是将用户导航到登录页面,那么,就还需要增加一个 *** 作,这个 *** 作的本质是希望用户再次提供安全凭据,在 ASPNET Core 中,这个 *** 作被称为 Challenge。这 3 个 *** 作结合在一起,就是验证最基本的要求,以接口形式表示,就是 IAuthenticationHandler 接口,如下所示:
验证的结果是一个 AuthenticateResult 对象。值得注意的是,它还提供了一个静态方法 NoResult() 用来返回没有得到结果,静态方法 Fail() 生成一个表示验证异常的结果,而 Success() 成功则需要提供验证票据。
通过验证之后,会返回一个包含了请求者票据的验证结果。
在 GitHub 中查看 AuthenticateResult 源码
那么验证的信息来自哪里呢?除了前面介绍的 3 个 *** 作之外,还要求一个初始化的 *** 作 Initialize,通过这个方法来提供当前请求的上下文信息。
在 GitHub 中查看 IAuthenticationHandler 定义
有的时候,我们还希望提供登出 *** 作,增加登出 *** 作的接口被称为 IAuthenticationSignOutHandler。
在 GitHub 中查看 IAuthenticationSignOutHandler 源码
在登出的基础上,如果还希望提供登录 *** 作,那么就是 IAuthenticationSignInHandler 接口。
在 GitHub 中查看 IAuthenticationSignInHandler 源码
直接实现接口还是比较麻烦的,在命名空间 MicrosoftAspNetCoreAuthentication 下,微软提供了抽象基类 AuthenticationHandler 以方便验证控制器的开发,其它控制器可以从该控制器派生,以取得其提供的服务。
通过类的定义可以看到,它使用了泛型。每个控制器应该有一个对应该控制器的配置选项,通过泛型来指定验证处理器所使用的配置类型,在构造函数中,可以看到它被用于获取对应的配置选项对象。
在 GitHub 中查看 AuthenticationHandler 源码
通过 InitializeAsync(),验证处理器可以获得当前请求的上下文对象 >
简单点
GET / >
Request URL: >
ashx是一般处理程序 与aspx页面的区别在于他没有前台dom的产生
返回的数据是你ResponseWrite("");中的 你可以拼接成任意格式的数据以字符串形式返回
以上就是关于ASP.NET Core认证原理和实现全部的内容,包括:ASP.NET Core认证原理和实现、asp.net网站如何获取访问者所在的地区 语言 访问来源 搜索引擎、某个页面停留时间等内容的、HTTP请求头问题等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)