繁体   English   中英

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

[英].NET Core 2.1 Linux Keycloak integration\authentication (OpenID Connect + SSSD)

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

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

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

好吧,我发现了很多像这样的第三方库, 这个库以及整个THIS库 ,它们看起来都很有前途,但是我没有找到足够的文档或示例来与.NET Core Identity一起使用。

就像我说的那样,我总体上是C#和.NET的新手,但是我不知道该库中哪个更好,或者是否有任何直接的方式来使用它们来存储和验证用户。

PS:我知道这个问题很愚蠢,但是出于学习目的,我不得不提出一个问题。 任何帮助,将不胜感激!

好吧,看来我最能找到答案了,但还是有一些警告。 我将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,因为我为此花了一个星期。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM