KeyCloak应该作为我的用户的认证服务器吗?

13

我希望能够在所有产品中实现单点登录,使用一个认证服务器实现,但这不仅仅是为了雇员,keycloak能像auth0一样被用于此目的吗?


1
抱歉,您的问题不够清晰。如果您想知道Auth0是否可以在应用程序之间提供SSO,并且还可以为B2E(联合)企业以及B2C(社交等)提供SSO行为,则是的,Auth0肯定可以用于此。您不需要使用Keycloak来实现上述任何功能-如果您已经在使用Keycloak,则Auth0和Keycloak之间的联合也是可行的,但我在这里推测了您特定的情况。 - arcseldon
很抱歉@arcseldon,我们的情况是,我们是一个任何人都可以在Play商店下载的应用程序,我们想知道是否可以在我们的情况下使用Keycloak来进行用户身份验证,因为我们计划做其他应用程序,并且我们希望实现单一登录。 - Augusto Monteiro
Augusto - 你对我的回答有什么评论吗?如果有帮助,请确认一下。 - arcseldon
@arcseldon,感谢您回答我的问题! - Augusto Monteiro
Augusto,很高兴听到这个消息。请您将答案标记为正确,以反映它已经回答了您的问题 :) - arcseldon
2个回答

32

Keycloak也有一些优点:

如果您购买JBoss EAP,还可以获得支持的Keycloak(请参见http://www.keycloak.org/support.html),这可能比Auth0的企业版更便宜。如果要使用自定义数据库,则无论如何都需要Auth0的企业版。

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

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

  1. 客户端应用程序想要访问资源R。
  2. 客户端应用程序询问Keycloak策略强制程序需要哪些权限才能访问资源R。
  3. Keycloak策略强制程序告诉客户端应用程序需要哪些权限P。
  4. 客户端应用程序从Keycloak请求带有权限P的访问令牌。
  5. 使用包含权限P的访问令牌向资源服务器发出请求。
  • 策略执行器(Policy enforcer)可保护资源服务器,可以向Keycloak查询权限P是否足以访问资源R。
  • 当Keycloak批准时,即可访问该资源。
  • 因此,在Keycloak中可以集中并配置更多内容。通过这种工作流程,您的客户端和资源服务器可以将更多安全逻辑和代码外包给Keycloak。在Auth0中,您可能需要自己实现步骤2、3和6。


    1
    Keycloak适用于非Java服务器吗?在这种情况下,我们需要自己开发一些东西吗? - arpit
    Java服务器在Keycloak提供的策略执行程序方面具有最佳支持。Node.js的支持有限,正在开放改进的票据。您可以始终使用Keycloak策略执行程序运行Java服务器,该程序仅将经授权的请求代理到您的资源服务器。或者,您可以根据请求方令牌的内容做出授权决策(然后只需要更简单的权利API)。但是,这样您就实现了自己的访问控制解决方案。请参见http://www.keycloak.org/docs/latest/authorization_services/index.html#authorization-api - Marcel
    我特别关注授权部分,看起来auth0也支持它:https://auth0.com/docs/rules/current。似乎Keycloak的功能更加先进,但是如果你有一段在正确时刻运行的JS代码,其余的就取决于你了。Keycloak提供了一个适配器,而使用auth0则需要处理访问令牌(JWT)中的内容。 - Nikolai Grigoriev

    8

    假设您只需要社交(Facebook,Google等)和/或用户名和密码验证,那么Auth0和Keycloak都应该能够实现您的目标。

    Auth0是风险较低的选择,而Keycloak适用于非商业性质的项目,如果没有全球24x7支持团队也能够承受生产中断。以下是我推荐使用Auth0的原因:其文档是世界级的,它们有快速启动样本,所以您可以在几分钟内上手,并轻松访问更高级的选项 - 无密码、身份验证、多因素身份验证、异常检测、x9可靠性、速率限制、广泛的管理API,以及为所有内容扩展的扩展程序,例如将日志导出到日志聚合器等。无论如何,祝您的项目顺利,显然最适合的可能取决于您自己的项目要求。

    应该补充说明的是,如果您正在进行移动开发,则Auth0会投入大量精力添加必要的专门安全流程以针对移动(本地/混合)应用程序。例如,在使用/authorize端点时使用PKCE。请记住这一点,因为目前还不确定Keycloak如何实现处理此类操作 - 许多身份验证服务提供商今天仍在错误地执行此操作。


    1
    今天有人双重否定了。如果您认为留下评论可以提高答案的质量,请您留下评论解释您的行动。谢谢。 - arcseldon
    20
    公正地说,你的回答对我来说有点片面。说Keycloak适用于“非商业”项目有点误导,因为Keycloak的许可证和功能都不限制你只能在开源项目中使用。 2020年,Keycloak已经具备了与Auth0相同的所有功能,包括PKCE。 - Wecherowski
    21
    如果你在Auth0工作,你应该披露这一点。 - ADJenks
    4
    为什么Keycloak更容易出现故障?因为它是自托管的,如果您不正确地维护它,它就像应用程序的任何部分一样容易出现故障。 - Idan Elhalwani
    3
    我本以为你在写那样的回答时会透露你是Auth0的雇员。我认为这对你和Auth0都不利。 - dfc

    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接