dex:CoreOS的开源身份认证服务解决方案

dex:CoreOS的开源身份认证服务解决方案

作者:翻译:姚洪 2015-09-06 10:34:47

云计算 dex是近日CoreOS发布的一项新的开源项目,它是一个基于多种标准的身份服务提供者和认证的解决方案。对于企业应用而言, 安全的进行认证和授权是必选项,dex无疑是解决这一问题的一大利器。

近日,CoreOS发布了一个新的开源项目dex,一个基于OpenID Connect的身份服务组件。 CoreOS已经将它用于生产环境:自家的tectonic.com上。用户认证和授权是应用安全的一个重要部分,用户身份管理本身也是一个特别专业和复杂的问题,尤其对于企业应用而言, 安全的进行认证和授权是必选项,dex无疑是解决这一问题的一大利器。

今天我们兴奋的发布CoreOS家族一个新的开源项目 dex:一个基于多种标准的身份服务提供者和认证解决方案。

几乎每一个项目都需要某种认证和用户管理。应用也需要一种方式能让用户从多种平台安全地登录, 例如web、移动端、命令行工具(CLI),以及自动化系统等。开发者通常使用一个依赖于平台的解决方案, 或者当常常发现已有的解决方案无法的解决他们的需求后就自己从头写一个解决方案。

然而, 大多数开发者并不负责安全的业务。让他们自己写认证软件不仅会让他们从核心产品的开发工作中分心,同时也显然会带来软件安全方面的危险。正确的处理安全方面的工作是很有难度的, 我们最近看到很多引人注目的安全事故,在没有被其他工程师或者安全专家做恰当审计的情况下任意而为只会带来更多的风险。

正是基于这些原因, 我们决定开源dex,这样我们已经完成的让dex成为一个安全健壮的平台的工作会让其他人也能受益。开放给社区之后,dex反过来也会从更多的合作者中受益。没有人再需要自己写一遍“忘记密码?”的流程,或者“以X,Y或者Z来登录”的功能了。

项目起名为『dex』是因为它是一个中心化的用户索引, 软件里面其他组件可以基于dex做认证。

核心设计元素

Dex如此独特是它包含了以下这些元素, 这些元素从最开始就驱动着设计和实现:

安全

安全是首要的工作:dex的设计采用了安全和加密的最佳实践来最小化攻击者获得系统访问权限的风险。 更进一步, dex的架构划分也可以减轻任何单个攻击可能带来的损害。例如,dex缺省使用软token生命周期,并自动轮换它的签名秘钥。由于秘钥本身是加密的,攻击者需要在短时间内同时侵入数据库和一个dex worker才能得到一个tocken。

标准

Dex是OpenID Connect(OIDC)核心标准的实现。OIDC(不要与OpenID混淆)是由业界领袖和安全专家基于web安全领域的多年经验合作创建的。它是OAuth 2之上的一层,提供了一个安全并且易于实现的认证协议。今天OIDC 已经作为一个单点登录的解决方案使用在众多互联网巨头里,例如Google、Facebook、Amazon等。

语言与平台无关性

因为dex实现了OpenID Connect(OIDC) 核心标准,所以将dex集成入你的应用中十分简单。仅需要一步:加入你所用的编程语言的OIDC客户端库。我们用Go写了一个 go-oidc,其他的几乎每种语言都有(请审查对应的客户端库以保证有适当的签名验证和协议符合度)。

联合身份

dex有自己的用户的概念, 但也允许通过不同的方式做认证, 称之为连接器connector。 现在, dex自带了两种类型的连接器: 本地local连接器和OIDC 连接器。 当使用local连接器做认证时, 用户使用email和密码通过dex本身提供的定制化UI来登录; 当使用OIDC连接器时, 用户可以通过登录第三方的OIDC身份服务提供方来认证, 例如Google或者Salesforce。

因为dex本身就是一个OIDC身份服务提供者, 它甚至可以做到将多个dex实例串联到一起,每个实例依次将认证工作委派给下一个。

现在用户必须在连接器中做选择,但是在未来我们计划允许身份的链接linking, 这样每个单独的用户都可以以不同的方式登录。 可扩展的连接器架构将会允许与多种身份服务做集成,例如GitHub, LDAP, SAML系统等。

案例学习: Tectonic.com

在CoreOS我们正使用dex的一种方式是做Tectonic客户的注册和认证。当一个用户首次决定成为Tectonic客户并按下Join的按钮时, 他们会被带到https://auth.tectoinc.com, 也就是OpenID Connect术语中的Issuer URL。 他们可以使用自己的Google身份或者输入用户名密码来注册。然后他们会被重定向回Tectonic.com网站来完成注册。

下面的图描述了整个部署:

图:dex架构图解

在我们的防火墙之后,我们有如下几个组件:

  • 一个postgres数据库用作dex的后端存储
  • 一个单独的dex-overlord, 负责轮换秘钥和其他的管理任务
  • 多个dex-worker, 提供前端给终端用户做认证
  • 产品站点,Tectonic.com

在OIDC中的依赖方(Relying Party, RP)-此案例中, 即我们的产品站点-为了一个ID token, 与身份提供者(identity provider, IdP),也就是dex, 交换一个Authorization Token(从终端用户那得到, 这里是Tectnoic的用户)。 注意虽然这里我们把我们的应用和dex都一起放在同一个防火墙后面, 但这并不是必须的。 他们互相之间是通过跨公网的一个TLS连接来沟通;如果你有多个不同的应用跑在不同的环境并都需要认证时这是相当有用的。

当用户选择使用Google账号做认证时,dex就临时变成RP,Google就变成了IdP来认证和识别用户。 一但dex完成了这个工作(通过上面提到的token交换协议), dex就回来成为IdP并完成与Tectonic.com的token交换。

整个过程中token都是加密签名过的,客户端会检查签名。 签名的秘钥会持续的被IdP来轮换并被RP来同步。

dex未来的计划

dex现在已经可以使用, 但是还有许多工作要做。 除了GitHub上的issues, dex路线图中还包括:

  • 授权 – 除了让dex处理认证之外,我们也想要让它成为一个通用的授权服务器
  • 用户管理 – 我们正处理初始开发阶段:开发API让管理员来管理用户, 但是很快它会更加完整并且也会带UI。
  • 多个远程的身份 – 如上所述,用户将会可以使用多种认证方法做认证
  • 更多的连接器类型 – 例如,LDAP、GitHub等。

dex仍然相当年轻, 接下来有很多工作要做。 如果你也对它感兴趣, 我们欢迎你的帮助!

原文链接:http://dockone.io/article/643
 

文章来源网络,作者:运维,如若转载,请注明出处:https://shuyeidc.com/wp/263989.html<

(0)
运维的头像运维
上一篇2025-05-04 19:58
下一篇 2025-05-04 20:00

相关推荐

  • 个人主题怎么制作?

    制作个人主题是一个将个人风格、兴趣或专业领域转化为视觉化或结构化内容的过程,无论是用于个人博客、作品集、社交媒体账号还是品牌形象,核心都是围绕“个人特色”展开,以下从定位、内容规划、视觉设计、技术实现四个维度,详细拆解制作个人主题的完整流程,明确主题定位:找到个人特色的核心主题定位是所有工作的起点,需要先回答……

    2025-11-20
    0
  • 社群营销管理关键是什么?

    社群营销的核心在于通过建立有温度、有价值、有归属感的社群,实现用户留存、转化和品牌传播,其管理需贯穿“目标定位-内容运营-用户互动-数据驱动-风险控制”全流程,以下从五个维度展开详细说明:明确社群定位与目标社群管理的首要任务是精准定位,需明确社群的核心价值(如行业交流、产品使用指导、兴趣分享等)、目标用户画像……

    2025-11-20
    0
  • 香港公司网站备案需要什么材料?

    香港公司进行网站备案是一个涉及多部门协调、流程相对严谨的过程,尤其需兼顾中国内地与香港两地的监管要求,由于香港公司注册地与中国内地不同,其网站若主要服务内地用户或使用内地服务器,需根据服务器位置、网站内容性质等,选择对应的备案路径(如工信部ICP备案或公安备案),以下从备案主体资格、流程步骤、材料准备、注意事项……

    2025-11-20
    0
  • 如何企业上云推广

    企业上云已成为数字化转型的核心战略,但推广过程中需结合行业特性、企业痛点与市场需求,构建系统性、多维度的推广体系,以下从市场定位、策略设计、执行落地及效果优化四个维度,详细拆解企业上云推广的实践路径,精准定位:明确目标企业与核心价值企业上云并非“一刀切”的方案,需先锁定目标客户群体,提炼差异化价值主张,客户分层……

    2025-11-20
    0
  • PS设计搜索框的实用技巧有哪些?

    在PS中设计一个美观且功能性的搜索框需要结合创意构思、视觉设计和用户体验考量,以下从设计思路、制作步骤、细节优化及交互预览等方面详细说明,帮助打造符合需求的搜索框,设计前的规划明确使用场景:根据网站或APP的整体风格确定搜索框的调性,例如极简风适合细线条和纯色,科技感适合渐变和发光效果,电商类则可能需要突出搜索……

    2025-11-20
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注