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

Posted

技术标签:

【中文标题】KeyCloak 应该用作我的用户的身份验证服务器吗?【英文标题】:KeyCloak should be used as auth server for my users? 【发布时间】:2018-03-09 06:33:27 【问题描述】:

所以我想在所有使用身份验证服务器的产品中进行单点登录,但这不仅适用于员工,还应该像 auth0 一样使用 keycloak 吗?

【问题讨论】:

抱歉,您的问题不清楚。如果您询问 Auth0 是否可以在应用程序之间提供 SSO,并且还为 B2E(联合)企业以及 B2C(社交等)提供 SSO 行为,那么肯定可以使用 Auth0。您不需要 keycloak 来实现上述任何一项 - 如果您已经在使用 keycloak,那么 auth0 和 keycloak 之间的联合也是可以实现的,但我在这里推测您的特定场景.. 对不起@arcseldon,所以我们是一个任何人都可以在Play商店下载的应用程序,我们想知道在我们的案例中是否可以使用keycloak来进行用户身份验证,因为我们正计划做另一个应用程序,我们想要单点登录 Augusto - 我的回答有什么问题吗?如果这有帮助,请确认。 @arcseldon 回答我的问题,谢谢! 奥古斯托,很高兴听到。请您将答案标记为正确以反映这回答了您的问题:) 【参考方案1】:

Auth0 和 Keycloak 都应该能够实现您的目标 - 假设您只想要社交(facebook、google 等)和/或用户名和密码身份验证?

Auth0 是风险较小的选择,keycloak 非常适合非商业用途,并且您可以在没有全球 24x7 支持团队的情况下承受生产中断。这是我推荐 Auth0 的其他一些原因 - 文档是世界一流的,它们有快速入门示例,因此您可以在几分钟内启动并运行,并且可以轻松访问更高级的选项 - 无密码、身份验证、MFA、异常检测、x9可靠性、速率限制、广泛的管理 API、所有内容的扩展,例如将日志导出到日志聚合器等等。无论如何,祝您的项目好运,显然最适合您的项目可能只是您自己的项目要求。

应该补充一点,如果您正在使用移动设备,那么 Auth0 会投入大量精力来添加必要的专用安全流程以针对移动(本机/混合)应用程序。例如,使用 /authorize 端点时的 PKCE 使用。请记住这一点,因为不确定如何实施 keycloak 来处理这个问题 - 今天很多 IDM 仍然不正确地这样做。

【讨论】:

今天有人投了两次反对票。请,如果您认为这有助于提高所提供答案的质量,您能否发表评论来解释您的行为?谢谢。 公平地说,您的回答在我看来有点片面。说 Keycloak 适用于“非商业”项目有点误导,因为 Keycloak 的许可证和它的功能都不会限制您使用开源项目。在 2020 年,Keycloak 具有 Auth0 的所有功能,包括。 PKCE 如果您为 Auth0 工作,您可能应该披露这一点。【参考方案2】:

Keycloak还有一些优点:

如果您购买了 JBoss EAP,

Keycloak is 也可以通过支持获得(请参阅http://www.keycloak.org/support.html)。这可能比 Auth0 的企业版便宜。如果要使用自定义数据库,无论如何都需要企业版 Auth0。

Keycloak 具有 Auth0 中没有的功能: 细粒度的权限和基于角色的访问控制 (RBAC) 和基于属性的访问控制 (ABAC) 可通过 Web 管理控制台或自定义代码进行配置,或者您可以编写自己的 Java 和 javascript 策略。这也可以通过用户规则(自定义 JavaScript)或授权插件(无代码,可能性较小)在 Auth0 中实现。在 Keycloak 中,您可以在没有代码的情况下做更多事情(有更多类型的开箱即用的安全策略,例如基于角色、组、当前时间、请求的来源),并且对自定义开发的访问控制模块有很好的支持。在这里进行一些更详细的研究来比较它们会很有趣。

Keycloak 还提供了一个策略执行器组件 - 您可以从后端连接到该组件并验证访问令牌是否足以访问给定资源。它最适用于 Java Web 服务器,或者您可以只部署一个带有 Keycloak 适配器的额外 Java 服务器,它将充当网守并决定哪些请求通过以及哪些请求被阻止。所有这些都基于您可以通过 Keycloak Web 界面配置的规则。我不确定这样的策略执行器是否包含在 Auth0 中。最重要的是,Keycloak 可以告诉您的客户端应用程序在您想要访问给定资源时需要哪些权限,因此您无需在客户端中对此进行编码。工作流程可以是:

    客户端应用程序想要访问资源 R。 客户端应用程序向 Keycloak 策略实施者询问访问资源 R 所需的权限。 Kecloak 策略执行器告诉客户端应用程序它需要哪个权限 P。 客户端应用程序向 Keycloak 请求具有权限 P 的访问令牌。 客户端使用包含权限 P 的访问令牌向资源服务器发出请求。 保护资源服务器的策略执行者可以询问 Keycloak 权限 P 是否足以访问资源 R。 Keycloak 批准后,即可访问资源。

因此,可以在 Keycloak 中集中和配置更多内容。通过此工作流程,您的客户端和资源服务器可以将更多安全逻辑和代码外包给 Keycloak。在 Auth0 中,您可能需要自己实现步骤 2、3、6。

【讨论】:

keycloak 是否适用于非 java 服务器?在这种情况下,我们需要推出自己的东西吗? Java 服务器在 Keycloak 提供的 Policy enforcer 方面拥有最好的支持。 Node.js 支持有限,有待改进。您始终可以让 Java 服务器运行 Keycloak 策略执行器,它只代理对您的资源服务器的授权请求。或者您可以根据请求方令牌的内容做出授权决策(那么您只需要更简单的授权 API)。但随后您正在实施自己的访问控制解决方案。见keycloak.org/docs/latest/authorization_services/… 我对授权部分特别好奇,似乎 auth0 也支持它:auth0.com/docs/rules/current。似乎 Keycloak 的产品更先进,但是,我想,如果你有一段 JS 代码在正确的时间运行,剩下的就看你了。 Keycloak 提供了一个适配器,使用 auth0 可以处理访问令牌 (JWT) 中的内容。

以上是关于KeyCloak 应该用作我的用户的身份验证服务器吗?的主要内容,如果未能解决你的问题,请参考以下文章

使用 Keycloak 进行微服务身份验证

Keycloak Angular 2 - 检查身份验证状态 Keycloak 对象

将 Flutter app facebook 身份验证与 Keycloak 服务集成

Keycloak 自定义用户联合和身份提供者工作顺序

将Flutter应用程序的Facebook身份验证与Keycloak服务集成在一起

移动应用程序 + REST 后端中的 OpenID Connect 身份验证流程(使用 KeyCloak)