From 89c128641e58966e1a2a0eee514fd050c006a42e Mon Sep 17 00:00:00 2001 From: Mikhail Trubnikov Date: Fri, 21 Nov 2025 12:00:54 +1000 Subject: [PATCH] =?UTF-8?q?fix(api):=20=D0=B4=D0=BE=D1=80=D0=B0=D0=B1?= =?UTF-8?q?=D0=BE=D1=82=D0=BA=D0=B0=20=D0=B0=D0=B2=D1=82=D0=BE=D1=80=D0=B8?= =?UTF-8?q?=D0=B7=D0=B0=D1=86=D0=B8=D0=B8=20=D0=BF=D1=80=D0=B8=20=D0=BE?= =?UTF-8?q?=D0=BF=D1=80=D0=BE=D1=81=D0=B5=20=D1=81=D0=BE=D1=81=D1=82=D0=BE?= =?UTF-8?q?=D1=8F=D0=BD=D0=B8=D1=8F=20=D0=BA=D0=BE=D0=BD=D1=82=D0=B5=D0=B9?= =?UTF-8?q?=D0=BD=D0=B5=D1=80=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ParrAuthenticationHandler.cs | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/PARR.API/Authentication/ParrAuthenticationHandler.cs b/PARR.API/Authentication/ParrAuthenticationHandler.cs index bdd960f2..078db9e3 100644 --- a/PARR.API/Authentication/ParrAuthenticationHandler.cs +++ b/PARR.API/Authentication/ParrAuthenticationHandler.cs @@ -27,6 +27,7 @@ namespace PARR.API.Authentication if (ipClient == null) return AuthenticateResult.Fail($"IP address not defined. IP: {ipClient}"); + // Аутентификация - просто проверка, есть ли у нас такой пользователь using (var scope = serviceProvider.CreateScope()) { @@ -36,7 +37,17 @@ namespace PARR.API.Authentication if (userIsBlocked) return AuthenticateResult.Fail($"IP address is on the blocking list. IP: {ipClient}"); + // если зашли с IP 127.0.0.1, то это скорей всего опрос состояния контейнера + // если этот пользователь не заведен в БД, то разрешаем ему вход, но роли не даем (он получит доступ как аноним) + // если он есть в БД, то применятся правила из БД + var user = await authService.GetUserAsync(ipClient); + if (user == null && ipClient == "127.0.0.1") + { + // это опрос состояния контейнера, возвращаем что ок, без ролей + return CreateLocalAuth(ipClient); + } + if (user == null) return AuthenticateResult.Fail($"IP address not defined. IP: {ipClient}"); @@ -56,5 +67,22 @@ namespace PARR.API.Authentication return AuthenticateResult.Success(new AuthenticationTicket(claimsPrincipal, Scheme.Name)); } } + + + private AuthenticateResult CreateLocalAuth(string ipClient) + { + // Когда контейнер запрашивает health статус, + + var claims = new List { + new Claim(ClaimTypes.Name, ipClient) + }; + + var claimsIdentity = new ClaimsIdentity(claims, Scheme.Name); + var claimsPrincipal = new ClaimsPrincipal(claimsIdentity); + + return AuthenticateResult.Success(new AuthenticationTicket(claimsPrincipal, Scheme.Name)); + } + + } }