我现在有点迷失了,我想在这里实现集中用户管理,我们在Linux上托管了.NET Core 2.1 Web MVC应用程序,它使用Identity.EntityFrameworkCore
来存储用户的信息。我们还有用于用户管理的FreeIPA,它基本上是LDAP目录上的Kerberos身份验证。
由于它部署在Linux上,我无法使用WindowsAuthentication
来使用Kerberos,而且没有标准方法可以在没有Windows兼容包的情况下使用LDAP。剩下的唯一方法是使用第三方库,但不幸的是我是.NET Core和C#的新手,所以这就是我想要做的:
好吧,我发现了一堆第三方库,如this,this和一大堆THIS,它们看起来都很有希望,但我没有发现任何有足够的文档或示例与.NET Core Identity
一起使用。
正如我所说,我在C#和.NET中完全是新手,我很遗憾不知道这个库哪个更好,或者是否有任何直接的方式来使用它们来存储和验证用户。
P.S我知道这个问题很愚蠢,但出于学习目的,我不得不做一个。任何帮助都将不胜感激!
好吧,看起来我大多找到了答案,但无论如何都有一些警告。我使用了Keycloak OpenID Connect设置和SSSD联合,因为无论如何,LDAP是我的目标的错误方法。关于这个设置的更多信息你可以阅读here,我在那里遇到了一些愚蠢的时刻,其中大部分是在this指南中预测和绕过的,但那更像是一个FreeIPA + Keycloak线程。应该注意的最后一个Keycloak事情:我必须添加并允许HBAC“keycloak”服务使其工作,因为否则我的SSSD身份验证被拒绝。前进到.NET核心部分:我的应用程序是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。