Согласно документации порядок промежуточного программного обеспечения должен быть следующим:
app.UseStaticFiles();
app.UseRouting();
app.UseAuthentication();
app.UseAuthorization();
У меня есть промежуточное программное обеспечение для защиты статических файлов, основанное на этой статье (защита определенных маршрутов). Проблема, с которой я сталкиваюсь, состоит в том, что заказ не работает для меня. Я могу защитить папку, только если пользователь уже авторизован. Поэтому мне нужно поместить UseProtectFolder
до UseStaticFiles
и после UseAuthentication
и UseAuthorization
:
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
?
Есть ли какая-то конкретная причина или это только для производительности? И, перемещая аутентификацию / авторизацию ранее в конвейере, это влияет на ответ (обратный порядок)?