【发布时间】:2019-10-20 17:41:53
【问题描述】:
根据documentation,中间件的顺序应该是这样的:
app.UseStaticFiles();
app.UseRouting();
app.UseAuthentication();
app.UseAuthorization();
我有中间件来保护静态文件,基于this article(保护某些路由)。我遇到的问题是订单对我不起作用。如果用户已获得授权,我只能保护文件夹。所以我需要在UseStaticFiles之前和UseAuthentication和UseAuthorization之后放置UseProtectFolder:
app.UseRouting();
app.UseAuthentication();
app.UseAuthorization();
app.UseProtectFolder(new ProtectFolderOptions
{
Path = "/Secret",
PolicyName = "Authenticated"
});
app.UseStaticFiles();
但这不会返回任何静态文件。看起来 UseRouting 正在做一些使文件不可用的事情,返回 404,因为当我将顺序更改为此时,将 UseRouting 移动到 UseStaticFiles 之后,它可以工作:
app.UseAuthentication();
app.UseAuthorization();
app.UseProtectFolder(new ProtectFolderOptions
{
Path = "/Secret",
PolicyName = "Authenticated"
});
app.UseStaticFiles();
app.UseRouting();
所以实际的顺序变化是UseAuthentication 放在UseRouting 之前(甚至在UseStaticFiles 之前)。
来自文档:
中间件组件的添加顺序 Startup.Configure 方法定义了中间件的顺序 组件在请求和相反的顺序被调用 回复。该顺序对于安全性、性能和 功能。
我现在的问题是:按照记录的顺序,为什么UseAuthentication 放在UseRouting 之后?
是有什么特殊原因还是仅仅出于性能原因?并且通过在管道中更早地移动身份验证/授权,这是否会影响响应(逆序)?
【问题讨论】:
标签: c# asp.net-core asp.net-core-3.0 asp.net-core-middleware