fix(api): доработка авторизации при опросе состояния контейнера
This commit is contained in:
@@ -27,6 +27,7 @@ namespace PARR.API.Authentication
|
|||||||
if (ipClient == null)
|
if (ipClient == null)
|
||||||
return AuthenticateResult.Fail($"IP address not defined. IP: {ipClient}");
|
return AuthenticateResult.Fail($"IP address not defined. IP: {ipClient}");
|
||||||
|
|
||||||
|
|
||||||
// Аутентификация - просто проверка, есть ли у нас такой пользователь
|
// Аутентификация - просто проверка, есть ли у нас такой пользователь
|
||||||
using (var scope = serviceProvider.CreateScope())
|
using (var scope = serviceProvider.CreateScope())
|
||||||
{
|
{
|
||||||
@@ -36,7 +37,17 @@ namespace PARR.API.Authentication
|
|||||||
if (userIsBlocked)
|
if (userIsBlocked)
|
||||||
return AuthenticateResult.Fail($"IP address is on the blocking list. IP: {ipClient}");
|
return AuthenticateResult.Fail($"IP address is on the blocking list. IP: {ipClient}");
|
||||||
|
|
||||||
|
// если зашли с IP 127.0.0.1, то это скорей всего опрос состояния контейнера
|
||||||
|
// если этот пользователь не заведен в БД, то разрешаем ему вход, но роли не даем (он получит доступ как аноним)
|
||||||
|
// если он есть в БД, то применятся правила из БД
|
||||||
|
|
||||||
var user = await authService.GetUserAsync(ipClient);
|
var user = await authService.GetUserAsync(ipClient);
|
||||||
|
if (user == null && ipClient == "127.0.0.1")
|
||||||
|
{
|
||||||
|
// это опрос состояния контейнера, возвращаем что ок, без ролей
|
||||||
|
return CreateLocalAuth(ipClient);
|
||||||
|
}
|
||||||
|
|
||||||
if (user == null)
|
if (user == null)
|
||||||
return AuthenticateResult.Fail($"IP address not defined. IP: {ipClient}");
|
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));
|
return AuthenticateResult.Success(new AuthenticationTicket(claimsPrincipal, Scheme.Name));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private AuthenticateResult CreateLocalAuth(string ipClient)
|
||||||
|
{
|
||||||
|
// Когда контейнер запрашивает health статус,
|
||||||
|
|
||||||
|
var claims = new List<Claim> {
|
||||||
|
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));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user