.NET Core 2.1 Linux Keycloak集成\身份验证(OpenID Connect + SSSD)

问题描述 投票:2回答:1

我现在有点迷失了,我想在这里实现集中用户管理,我们在Linux上托管了.NET Core 2.1 Web MVC应用程序,它使用Identity.EntityFrameworkCore来存储用户的信息。我们还有用于用户管理的FreeIPA,它基本上是LDAP目录上的Kerberos身份验证。

由于它部署在Linux上,我无法使用WindowsAuthentication来使用Kerberos,而且没有标准方法可以在没有Windows兼容包的情况下使用LDAP。剩下的唯一方法是使用第三方库,但不幸的是我是.NET Core和C#的新手,所以这就是我想要做的:

  1. 在LDAP中存储用户信息(roles \ claims \ credentials)以实现集中用户管理(现在使用数据库表)
  2. 我想实现SSO,这可以通过Kerberos Negotiate身份验证,但现在我找不到在Linux上使用它的方法。也可以通过app->重定向到Keycloak - > Kerberos-> OpenID Connect - > app,但我很高兴找到Kerberos的解决方案

好吧,我发现了一堆第三方库,如thisthis和一大堆THIS,它们看起来都很有希望,但我没有发现任何有足够的文档或示例与.NET Core Identity一起使用。

正如我所说,我在C#和.NET中完全是新手,我很遗憾不知道这个库哪个更好,或者是否有任何直接的方式来使用它们来存储和验证用户。

P.S我知道这个问题很愚蠢,但出于学习目的,我不得不做一个。任何帮助都将不胜感激!

c# .net-core asp.net-core-mvc openid-connect keycloak
1个回答
0
投票

好吧,看起来我大多找到了答案,但无论如何都有一些警告。我使用了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。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.