我们用基于Hydra / Kratos的解决方案遇到的技术挑战以及我们如何解决它们。
Pixie是最近被新遗物获得的可观察性平台。要使项目更易于开发人员社区,新的遗物是开放的源精灵。作为我们对OSS承诺的一部分,我们希望在完全开源环境中可以部署精灵。但是,Pixie对Auth0具有很强的依赖,这将使这项努力复杂化。
在此帖子中,我们详细介绍了我们如何重新设计的Pixie' s auth是开源兼容的。我们讨论几种方法的贸易问题,并潜入我们的最终开源实施。让'首先从我们的Auth0设计开始。
将验证添加到Pixie非常简单。 Indoply Auth0' S API不到一天,我们的实施继续工作两年后。验证在整个体验中都非常易于使用。
在我们的原始身份验证方案(下图)中,Pixie' s UI重定向到auth0并收到访问令牌。 UI将令牌转发到Pixie Cloud后端,后端通过拨打外部Auth0服务器来验证令牌。
Auth0所有繁重的升降机都提供了一种设置不同的登录提供商的简单方法 - 我们使用基于谷歌的注册和登录流程。在注册期间,用户可以让我们访问他们的姓名和档案图片。我们将其纳入我们的小型外形下拉,舍入用户体验。
Auth0 + Google Flow很简单,对我们来说非常好。 Auth0保存了我们以后花在我们的核心可观察性产品上的开发时间。我们将Auth0向任何与托管的第三方解决方案舒适的人推荐给任何人。
不幸的是,Auth0不适用于Pixie'开源提供。我们不想要求开源用户依赖于远程托管的封闭源API。这对我们的用户具有无法进行外部网络请求的空中覆盖群体尤为重要。我们需要一个独立版本的Pixie,它专门依赖于开源组件。
作为此更改的一部分,我们还需要启用用户名和密码登录。我们的托管实现需要来自第三方提供商的身份(即谷歌) - 违反我们开源承诺的另一个依赖关系。另一方面,用户名/密码可以使用开源库实现,无论群集和#39;网络连接如何,都可以实现。
在设置期间向用户增加额外的负担,不起作用"从框中开箱"
此选项是引人注目的,但会将用户限制为愿意和能够开立Auth0帐户的用户。它还增加了摩擦来获取Pixie云并运行,同时还可以防止网络隔离的Pixie云部署。我们希望尽可能多地向Pixie云开放,因此单独选择1赢得了我们的需求。
虽然开源项目通常从头开始实施身份验证,但我们谨慎花时间滚动自己的解决方案。像所有开发团队一样,Pixie拥有我们在我们的产品中分配的工程预算。滚动我们自己的Auth将要求我们在此功能上花费大块该预算,同时在不正确的情况下承担打开安全漏洞的风险。我们宁愿依赖专家建造的项目,并被开源社区审查。
向第三方图书馆外包逻辑通常更容易完成。使用现成的解决方案声音吸引力,但集成到现有项目需要时间来学习新系统并使其适应您的特定需求。上行的是你继承了图书馆的工作知识和开发人员的工作知识,并拯救了自己许多边缘案例发现的痛苦。
在这种情况下,我们感受到了益处超过了缺点。安全对我们来说非常重要,因为我们处理敏感的用户数据。重新设计我们的系统值得使用安全/认证专家编写的现有解决方案是值得的。
我们发现ory' kratos和hydra项目的组合最适合我们的需求。许多其他替代方案Don' t提供用户名/密码身份验证,而是依赖OAUTH / OIDC。其他人将用户限制为预构建的UI。 Kratos和Hydra一起给了我们一个灵活的完整解决方案,适合我们的需求,同时也仍然可以在开源社区中的任何人访问。
在高水平,Ory' kratos是一个用于身份和用户管理的开源系统。 Kratos支持注册,登录,身份验证和其他与用户相关的任务,全部通过方便的REST API。目前,Pixie仅使用Kratos进行用户名/密码的身份验证,但Kratos还支持与第三方身份提供商通过OIDC(即Google Identity平台)登录。
与我们的auth0用例不同,kratos使用有状态会话cookie而不是无状态访问令牌来存储身份信息。最重要的区别是会话cookie需要服务往返检查授权,而可以在端点验证像JWT的访问令牌,从而减少访问认证端点所需的延迟。 (您可以在此处了解更多信息)。
我们的Auth设计包括JWTS的性能优势,但Kratos仅提供会话cookie选项。我们用Hydra填补这个差距。
HYDRA,ORY的另一个项目,是一个开源OAuth 2.0服务器和OpenID Connect Provider。 Hydra不与身份或用户管理包装 - 相反,它完全专注于使API访问OAuth流程,并希望用户附带自己的身份解决方案(例如kratos)。额外的好处是该项目非常成熟,也在几家着名公司的生产中。我们在Pixie Cloud中使用Hydra来创建我们在其余的后端使用的无状态访问令牌。但是,我们必须做一些工作来将kratos会话cookie转换为访问令牌。
Kratos维护者打算在Hydra和Kratos之间建立明确的集成,并且它们在JavaScript中进行了分组。但是,(在撰写本文时)整合仍然是正在进行的工作,因此我们需要自己建造它。
我们在此记录我们的设计以供参考,以防未来读者也希望基于访问令牌,开源,Auth解决方案。
Hydra / Kratos集成是复杂的,所以它最容易用一个例子来证明。让'分解成功的登录流程。步骤匹配上图。
Kratos日志在用户中,设置会话cookie,并将用户重定向到Pixie后端API服务上的端点。
Pixie' S API服务告诉Hydra接受用户' s登录,因为用户有一个有效的会话cookie。
Hydra将UI(通过上述API响应未绘制)重定向到UI接收OAuth访问令牌的端点。
Pixie' s auth服务使用Hydra验证访问令牌,以确保它正在接收来自用户的合法请求。
Hydra响应访问令牌是有效的,并且Pixie' s auth服务生成增强令牌。这一增强令牌作为用户的一部分存储,并将其加密会话cookie存储。当UI使后续请求对Auth-受限的终端进行后,API服务验证存储在用户中的增强令牌' s会话中的增强令牌。
使用Hydra / kratos的身份验证实现,以下用户将能够使用Pixie:
需要完全开源可观察性解决方案的用户,该解决方案开箱即用
鉴于好处,我们仍将在Pixie中支持auth0。 Pixie用户将选择使用Auth0配置其部署或依赖Kratos和Hydra。我们将Auth解决方案减少到简单的界面,如下图所示。
我们是Auth0和Ory' s hydra / kratos的大粉丝。每个都带有自己的权衡,我们提供两个选项,使我们的用户能够选择最适合它们的用例。最重要的是,两种解决方案都被安全专家审查,并由其广泛的用户基础硬化。 Pixie' S的开发团队可以花费更少的时间担心安全性,而是专注于使我们的无仪器观察性平台更好。我们希望这个博客帖子有助于您决定哪种Auth解决方案最适合您。
如果您想潜入我们的Auth代码,请查看我们的GitHub。如果您对该主题有任何疑问,请加入我们的懈怠并向我们发送一条消息。