【问题标题】:.NET Core 2.1 Linux Keycloak integration\authentication (OpenID Connect + SSSD).NET Core 2.1 Linux Keycloak 集成\身份验证(OpenID Connect + SSSD)
【发布时间】:2019-06-14 07:49:39
【问题描述】:

我现在有点迷茫,我想在这里实现集中的用户管理,我们在 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 协商身份验证实现,但现在我找不到在 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】:

    嗯,看起来我基本上找到了答案,但无论如何它有一些警告。我使用带有 SSSD 联合的 Keycloak OpenID Connect 设置,因为无论如何 LDAP 对我的目标来说都是错误的方法。有关该设置的更多信息,您可以阅读here,我在那里遇到了一些愚蠢的时刻,其中大部分都在this 指南中被预测和绕过,但这更像是一个 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。

    【讨论】:

    • 只是一个问题:为什么不从 appsettings.json 获取 ResponseType 而不是硬编码呢? (更不用说您将选项中的响应类型加倍了)
    • 在我的项目中是这样的,老实说,我是在另一台笔记本电脑上工作时写的,所以它被召回了,而不是实际代码
    猜你喜欢
    • 2019-03-14
    • 2019-03-28
    • 2019-04-24
    • 2020-05-28
    • 2021-09-07
    • 2018-06-25
    • 2018-07-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多