我正在观看有关 Asp .net core 的教程,我想知道过滤器和中间件之间的区别,经过一些研究,我找到了我的问题的答案:中间件管道在过滤器管道之前进行。但我面临着奇怪的情况! 当我在任何操作方法之前使用 [Authorize] 时,因为它是一个过滤器,使用身份验证和授权中间件的目的是什么?因为过滤器是在中间件之后执行的。
我的意思是主要问题是,使用身份验证和授权中间件的目的是什么?当我们在任何操作方法之前使用 [Authorize] 时,处理请求的流程是什么?
实际上,授权过滤器是授权中间件职责的一部分。如果缺少授权中间件则无法工作,运行时会抛出异常。
发生的情况是,每当 HTTP 请求到来时,它都会通过中间件管道。身份验证中间件将使用先前配置的身份验证方案(例如 cookie 或令牌)对用户(已发送请求)进行身份验证。然后,授权中间件将比较用户的声明(存在于所提供的令牌或 cookie 中)与通过 [Authorize] 属性指定的安全要求。如果授权失败,HTTP请求将被过滤掉,并阻止对请求的操作方法的访问。
这是关于事情如何运作的总结,希望有所帮助!
您对这些概念有误解。
中间件是放置在应用程序管道中用于处理请求和响应的一段代码。
Filter 不是中间件,它是可以在
UseEndpoints
中间件(razor 页面或控制器)中的特定阶段之前或之后运行的一段代码。您可以将过滤器视为放置在处理端点的较小管道中的半中间件。
我建议您参考Filters和Middleware了解更多信息。