我应该使用keycloak吗?

Posted

技术标签:

【中文标题】我应该使用keycloak吗?【英文标题】:Should I use keycloak or not? 【发布时间】:2018-09-11 09:49:59 【问题描述】:

我刚刚开始一个新项目。结果将是一个 API 服务器和一个渐进式 Web 应用程序。 API 服务器使用 TypeScript 和 NestJS 框架实现,客户端使用 Angular 6。

我和 keycloak 调情已经有一段时间了。不过,我还不确定它是否适合我。但是我不想再担心令牌更新之类的事情,并且觉得 Keycloak 告诉我如何创建用户角色很性感。

困扰我的是以下 - 集成。对于我的用例,登录和密码重置等所有功能必须是我的应用程序的一部分。这意味着我想自己创建表单,以便能够在我自己的设计中完美地做到这一点,并且没有第二个翻译过程等。Keycloak 主题不是一个选项。那么是否有可能以这种方式隐藏keycloak,或者它是如此复杂以至于我不应该首先使用Keyloak? Afaik 密码重置已经存在问题 - 我无法从用户端请求它,但必须对管理端点进行 REST 调用 - 这没关系,但并不理想,因为它需要我做更多的服务器端逻辑(和这不是我想使用 Keycloak 的原因)。

此外,Keycloak 对 GUI 的影响太大了——这对我来说很困难,尤其是在开发过程中。因为我还想在开发过程中为我的团队提供一个本地的 keycloak 实例。但是将初始数据导入领域、应用程序以及用户导入 Keycloak 的概念是什么?我发现了一些 JSON 导入 - 但到目前为止仅适用于领域和应用程序。还有导入整个哑巴的功能吗?

这样我的团队就建立在预先构建的设置之上,并且每个角色都有一个用户。使用 Vagrant 或 Docker 进行可重现的设置,其中包含初始数据的导入 - 这将是目标。

简而言之,我的问题:

    如果我想通过 API 使用所有东西,还是应该只使用 Passport 和 JWT,使用 Keycloak 是否仍然值得努力? 在我的开发过程中,我能否有一个可重现的设置,包括领域、应用程序、用户、用户角色等?

【问题讨论】:

首先,我想说.. 不,不是。只要您使用 OIDC 或 SAML 协议提供的流,Keycloak 旨在做好它。直接攻击 API 可以避免完成此流程。对于第二个,您有两个选择,在您的一些组织服务器中拥有一个开发实例并将其用于开发,或者如果您想为每个开发人员拥有一个副本,请使用 mysql keycloak docker 映像并复制包含您的数据库每个开发工作场所的开发环境。 【参考方案1】:

所以,几个月前提出的问题,但我也面临这个问题,我想回答它。

我认为你不需要 Keycloak,使用 OAuth2 和 JWT 就足够了。

让我们证明我的回答是正确的:

您只有一个客户端 - Angular 应用程序。当您有许多客户端(web-js、移动平台)并且想要动态创建和管理它们时,Keycloak 很有用。但是,我认为,在您的情况下,您创建了一次客户端,以后无需修改。

此外,当您与第三方系统(Google、Fb、Twitter 等)进行大量集成时,Keycloak 非常有用,因为 Keycloak 具有开箱即用的功能。或者您需要与一些 SAML 或 LDAP 提供程序集成。

如果您需要一些身份和用户管理平台,以及当您有复杂的用户访问流程时,您可以使用 Keycloak。

最后,如果您需要 SSO(单点登录)功能,您可以考虑使用 Keycloak。登录 Keycloak 后,用户无需再次登录即可访问不同的应用程序。但是,根据您的描述,您只有一个应用程序。

【讨论】:

【参考方案2】:

Keycloak 提供单点登录 (SSO)、身份代理和社交登录、用户联合、客户端适配器、管理控制台和帐户管理控制台等功能。 它是一种开箱即用的解决方案,用于快速开发应用程序的安全层。您可以为多个应用程序使用单个公共安全层。 您可以在不使用 keycloak 的情况下实现您的安全机制。

【讨论】:

以上是关于我应该使用keycloak吗?的主要内容,如果未能解决你的问题,请参考以下文章

KeyCloak 应该用作我的用户的身份验证服务器吗?

可以在 keycloak 中使用基于 SMS 的 OTP 吗?

除了 keycloak 令牌之外,我还需要其他任何东西来访问使用 keycloak 保护的服务吗?

我应该明确验证 Keycloak 令牌还是由 Keycloak 适配器完成?

如何避免KeyCloak的登录页面,部署我们项目的自定义登录页面?

如何绕过keycloak登录页面?