Промежуточное программное обеспечение для аутентификации на локальном IP .Net Core - PullRequest
0 голосов
/ 24 сентября 2019

В IIS у меня включена антоним и аутентификация Windows.В коде я хочу проверить, является ли IP-адрес запроса не маршрутизируемым, если не , я хочу, чтобы браузер запросил учетные данные.

Я попытался вернуть код состояния 401,но это не заставляет браузер бросать вызов.Что мне не хватает?Есть лучший способ сделать это?Как я могу создать пользовательский атрибут, похожий на Authorize, чтобы добиться того же поведения (что-то вроде LocalOnly) для методов WebAPI?

Вот что я имею в методе Configure в Startup.cs:

 app.Use(async (context, next) =>
        {
            var ip = context.Connection.RemoteIpAddress.ToString();
            var isInternal = Regex.IsMatch(ip, @"(^127\.)|(^(0)?10\.)|(^172\.(0)?1[6-9]\.)|(^172\.(0)?2[0-9]\.)|(^172\.(0)?3[0-1]\.)|(^169\.254\.)|(^192\.168\.)");
            if (!isInternal && !context.User.Identity.IsAuthenticated) {
                context.Response.StatusCode = 401;
            } else
            {
                await next();
            }
        });
...