aspnet core 3 - защита статических файлов (wwwroot) с помощью специального провайдера аутентификации, такого как дайджест - PullRequest
0 голосов
/ 22 октября 2019

Мы хотим защитить некоторые статические файлы, размещенные под wwwroot в asp.netcore3 под Kestrel.

У меня есть собственный провайдер дайджеста (после этого проекта github) https://github.com/flakey-bit/DotNetDigestAuth

У меня также естьсоздал промежуточное программное обеспечение, следуя этому руководству: https://odetocode.com/blogs/scott/archive/2015/10/06/authorization-policies-and-middleware-in-asp-net-5.aspx

При запросе файлов из статического каталога я могу проследить, что HandleAuthenticateAsync [ссылка] вызывается и возвращает AuthenticateResult.NoResult()но он никогда не пытается вызвать HandleChallengeAsync [ссылка] , что затем должно предложить пользователю правильный дайджест. Это не то, что происходит. Результатом является 0-байтовый ответ тела и код ответа http 200.

Я не хочу создавать контроллер для размещения пути к файлам. Это кажется глупым для меня. Наши реагирующие скомпилированные файлы UI + js, css, файлы изображений и т. Д. ... мы просто не хотим, чтобы они были публично представлены, если у вас нет надлежащих простых учетных данных. Нам просто нужно защитить все файлы в папке wwwroot.

В моем ConfigureServices:

services.AddAuthentication("Digest")
    .AddDigestAuthentication(DigestAuthenticationConfiguration.Create("MySuperPass", MyProvider.AuthRealm, 30, true));
services.AddAuthorization(options =>
    {
        options.AddPolicy("Authenticated", policy => policy.RequireAuthenticatedUser());
    });

В моем запуске ...

app.UseAuthorization();
app.UseProtectFolder(new ProtectFolderOptions
{
   Path = "/mysecurepath",
   PolicyName = "Authenticated"
});
app.UseDefaultFiles();
app.UseStaticFiles();
app.UseRouting();

app.UseAuthentication();

Я пробовал многочисленныеместа размещения UseAuthorization() и UseAuthentication() - кажется, я не могу заставить его запросить пользователя / пароль.

Это явно не разрешенный анонимный доступ, потому что тогда я должен получить правильный контент http, а не тело 0 байтовответ.

Я что-то пропустил, чтобы браузер запросил доступ? Это обещает увидеть попадание промежуточного ПО, но, поскольку HandleChallengeAsync() никогда не вызывается, я могу только думать, что моя конфигурация неверна.

...