Authentication 身份验证/授权中间件是否应返回403以查找缺失的api路由?

Authentication 身份验证/授权中间件是否应返回403以查找缺失的api路由?,authentication,asp.net-core,asp.net-core-mvc,asp.net-core-webapi,asp.net-core-middleware,Authentication,Asp.net Core,Asp.net Core Mvc,Asp.net Core Webapi,Asp.net Core Middleware,我正在使用ASP.NET Core 2.0并开始设置Startup.cs文件。我从阅读中了解到中间件的顺序非常重要 通过此链接: 下图所示: 它表示如果提供的身份验证中间件设置正确,然后如果身份验证失败,则不管路由是否存在,都会发送未经授权的响应(HTTP 401-unauthorized) 在我的场景中,对于不存在的路由,我将得到HTTP 404(未找到)的响应。在我发布一些代码之前,我对中间件应该如何运行的理解正确吗 谢谢。除了强调身份验证和授权之间的区别的评论外,这句话非常有用(来自: 身

我正在使用ASP.NET Core 2.0并开始设置
Startup.cs
文件。我从阅读中了解到中间件的顺序非常重要

通过此链接:

下图所示:

它表示如果提供的身份验证中间件设置正确,然后如果身份验证失败,则不管路由是否存在,都会发送未经授权的响应(HTTP 401-unauthorized)

在我的场景中,对于不存在的路由,我将得到HTTP 404(未找到)的响应。在我发布一些代码之前,我对中间件应该如何运行的理解正确吗


谢谢。

除了强调身份验证和授权之间的区别的评论外,这句话非常有用(来自:

身份验证不会使未经身份验证的请求短路。 虽然身份验证中间件对请求进行身份验证, 只有在MVC选择一个特定的 Razor页面或MVC控制器和操作

如果没有Razor页面或MVC控制器可供选择,这将导致在授权检查产生HTTP 401(未授权)之前出现HTTP 404(未找到)


请记住,可以在操作级别指定授权属性,这意味着在选择页面或控制器/操作之前,授权检查没有足够的信息来接受或拒绝请求(例如,控制器可以用[Authorize]修饰)属性,而其中的特定操作用[AllowAnonymous]属性修饰)。

无论路由是否存在,您在哪里读取?未经授权的响应(HTTP 401-unauthorized)已发送?@DavidG我的错误-我不是说我读了,而是从图表中解释了它。我试图澄清,如果身份验证失败(例如,报头丢失),它将进入链中的下一个中间件,还是将立即退出。好的,您是如何从图表中解释的?第一组箭头指定了未经授权的请求。我猜你暗示这不是一个正确的解释。发送回401有它的用途,例如,从不择手段的访问者那里混淆端点URL,但这是非常罕见的。除此之外,只要发回404就行了。