Как отключить анонимный вход в контроллеры с помощью Kestrel? - PullRequest
0 голосов
/ 28 февраля 2020

HttpSys имеет Authentication.AllowAnonymous, но Kestrel не имеет аналогичных настроек.

Как я могу массово запретить анонимный доступ к контроллерам без использования атрибутов? Чтобы попросить пароль.

1 Ответ

0 голосов
/ 28 февраля 2020

Нашел это решение:

public class DenyAnonymousMiddleware
{
    private readonly RequestDelegate _next;

    public DenyAnonymousMiddleware(RequestDelegate next)
    {
        this._next = next;
    }

    public async Task InvokeAsync(HttpContext context)
    {
        var endpoint = context.GetEndpoint();
        if (string.IsNullOrEmpty(context.User?.Identity?.Name) && !endpoint.Metadata.OfType<AllowNullAttribute>().Any())
        {
            context.Response.StatusCode = 401;
            var values = new StringValues(new string[] { "Negotiate", "NTLM" });
            context.Response.Headers.Add(HeaderNames.WWWAuthenticate, values);
            await context.Response.WriteAsync("Unauthorized Windows User");
        }
        else
        {
            await _next.Invoke(context);
        }
    }
}
...