ASP.NET Core认证原理和实现

ASP.NET Core认证原理和实现,第1张

通常在应用程序中,安全分为前后两个步骤:验证和授权。验证负责检查当前请求者的身份,而授权则根据上一步得到的身份决定当前请求者是否能够访问期望的资源。

既然安全从验证开始,我们也就从验证开始介绍安全。

我们先从比较简单的场景开始考虑,例如在 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(),验证处理器可以获得当前请求的上下文对象 >

有的WAP页面什么判断连接的信息是不是用手机连接,后以有时候会取不下来

注:XML>

aspnet 发送>

<head>:标记分别表示头信息的开始和结束。

<body></body>:在web页面中显示的实际内容包含在两个主体标记之间。超文本文本标记语言主体标记也称为实体标记。它是你在页面上看到的版本,所有东西都在那里。

<div></div>:一种层次结构的框架,把文档分成单独的,不同的部分,可以作为一种严格的组织工具来使用,并且不以任何形式与它相关联。

<tr></tr>\<td></td> :是<table></table里面的元素,表示一行therow。

<table><tr><td></td></tr> </table>:是单元格,表示具有行和列的表。

扩展资料:

注意事项:

从使用的角度来看,ASP的运行过程。NET包括页面请求、分析、编译、汇编和页面缓冲。当客户机通过浏览器请求页面时,服务器首先通过页面解析器分析所请求的页面。

然后将解析后的页面内容传递给编译器,编译器编译的页面内容被传输到程序集缓存。

一些需要高资源成本的元素可以一次性创建并存储在内存中,程序集缓存与内存中的内容有机地结合在一起,形成一个完整的页面(包括数据、编译后的代码、HTML代码等)。

最终将完整的页面发送到输出缓存。作为客户机页面请求的结果,输出缓存中的内容被发送回浏览器。

你的MEDIA_ID没传递给微信,所以会返回错误,还有你的ACCESS_TOKEN访问令牌也没改,这两个参数给正确才会返回信息

>

以上就是关于ASP.NET Core认证原理和实现全部的内容,包括:ASP.NET Core认证原理和实现、请求对象错误ASP 0104 : 80004005、ASP中用XMLHTTP获取WAP页面等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9685114.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-30
下一篇 2023-04-30

发表评论

登录后才能评论

评论列表(0条)

保存