Ну, похоже, я в основном нашел ответ, но в любом случае у него есть некоторые оговорки.Я использовал настройку Keycloak OpenID Connect с федерацией SSSD, потому что LDAP в любом случае является неправильным подходом для моих целей.Подробнее об этой настройке вы можете прочитать здесь , там я столкнулся с некоторыми глупостями, большинство из которых предсказаны и обойдены в этом руководстве, но это скорее поток FreeIPA + Keycloak.Последняя вещь о Keycloak, которую следует отметить: мне пришлось добавить и разрешить HBAC-сервису «keycloak», чтобы он заработал, потому что в противном случае моя аутентификация SSSD была отклонена.Переходя к части .NET Core: мое приложение 2.1, и мои настройки выглядят так:
Я добавил следующее в зависимости Startup.cs:
using Microsoft.AspNetCore.Authentication;
using Microsoft.AspNetCore.Authentication.Cookies;
using Microsoft.AspNetCore.Authentication.JwtBearer;
using Microsoft.AspNetCore.Authentication.OpenIdConnect;
using System.IdentityModel.Tokens;
Далее я добавилКонфигурация в appsettings.json
"Oidc": {
"ClientId": "<your client id here>",
"ClientSecret": "<your secret here>",
"Authority": "https://<ip:port of keycloak https>/auth/realms/<realm name>",
"ResponseType": "code"
}
Хорошо, перейдем к самой конфигурации:
services.AddAuthentication(options => {
options.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = OpenIdConnectDefaults.AuthenticationScheme;
})
.AddCookie("Cookies")
.AddOpenIdConnect(options =>
{
options.ClientId = Configuration["Oidc:ClientId"];
options.ClientSecret = Configuration["Oidc:ClientSecret"];
options.Authority = Configuration["Oidc:Authority"];
options.SaveTokens = true;
options.GetClaimsFromUserInfoEndpoint = true;
options.ResponseType = Configuration["Oidc:ResponseType"];
options.Scope.Add("claims");
options.ClaimActions.Clear();
options.ClaimActions.MapUniqueJsonKey("roles", "roles");
}
);;
Надеюсь, этот краткий ответ поможет кому-то настроить FreeIPA + Keycloak и подключить его к.NET Core, потому что я убил неделю за это: D.