Мы хотим защитить некоторые статические файлы, размещенные под 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()
никогда не вызывается, я могу только думать, что моя конфигурация неверна.