Dex 是一种身份服务,它使用 OpenID Connect 来驱动其他应用程序的身份验证。
Dex 通过“连接器”充当其他身份提供商的门户。这使得 dex 可以推迟对 LDAP 服务器、SAML 提供商或已建立的身份提供商(如 GitHub、Google 和 Active Directory)的身份验证。客户端编写一次身份验证逻辑以与 dex 对话,然后 dex 处理给定后端的协议。
ID 令牌是 OpenID Connect 和 dex 的主要功能引入的 OAuth2 扩展。 ID 令牌是由 dex 签名的 JSON Web 令牌 (JWT),并作为证明最终用户身份的 OAuth2 响应的一部分返回。 JWT 示例可能如下所示:
eyJhbGciOiJSUzI1NiIsImtpZCI6IjlkNDQ3NDFmNzczYjkzOGNmNjVkZDMyNjY4NWI4NjE4MGMzMjRkOTkifQ.eyJpc3MiOiJodHRwOi8vMTI3LjAuMC4xOjU1NTYvZGV4Iiwic3ViIjoiQ2djeU16UXlOelE1RWdabmFYUm9kV0kiLCJhdWQiOiJleGFtcGxlLWFwcCIsImV4cCI6MTQ5Mjg4MjA0MiwiaWF0IjoxNDkyNzk1NjQyLCJhdF9oYXNoIjoiYmk5NmdPWFpTaHZsV1l0YWw5RXFpdyIsImVtYWlsIjoiZXJpYy5jaGlhbmdAY29yZW9zLmNvbSIsImVtYWlsX3ZlcmlmaWVkIjp0cnVlLCJncm91cHMiOlsiYWRtaW5zIiwiZGV2ZWxvcGVycyJdLCJuYW1lIjoiRXJpYyBDaGlhbmcifQ.OhROPq_0eP-zsQRjg87KZ4wGkjiQGnTi5QuG877AdJDb3R2ZCOk2Vkf5SdP8cPyb3VMqL32G4hLDayniiv8f1_ZXAde0sKrayfQ10XAXFgZl_P1yilkLdknxn6nbhDRVllpWcB12ki9vmAxklAr0B1C4kr5nI3-BZLrFcUR5sQbxwJj4oW1OuG6jJCNGHXGNTBTNEaM28eD-9nhfBeuBTzzO7BKwPsojjj4C9ogU4JQhGvm_l4yfVi0boSx8c0FX3JsiB0yLa1ZdJVWVl9m90XmbWRSD85pNDQHcWZP9hR6CMgbvGkZsgjG32qeRwUL_eNkNowSBNWLrGNPoON1gMg
ID 令牌包含标准声明,断言哪个客户端应用程序登录了用户、令牌何时过期以及用户的身份。
{
"iss" : " http://127.0.0.1:5556/dex " ,
"sub" : " CgcyMzQyNzQ5EgZnaXRodWI " ,
"aud" : " example-app " ,
"exp" : 1492882042 ,
"iat" : 1492795642 ,
"at_hash" : " bi96gOXZShvlWYtal9Eqiw " ,
"email" : " [email protected] " ,
"email_verified" : true ,
"groups" : [
" admins " ,
" developers "
],
"name" : " Jane Doe "
}
由于这些令牌由 dex 签名并包含基于标准的声明,因此其他服务可以将它们用作服务到服务的凭证。已经可以使用 dex 发行的 OpenID Connect ID 令牌的系统包括:
有关如何请求或验证 ID Token 的详细信息,请参阅“编写使用 dex 的应用程序” 。
Dex 使用自定义资源定义在任何 Kubernetes 集群之上本机运行,并且可以通过 OpenID Connect 插件驱动 API 服务器身份验证。客户端(例如kubernetes-dashboard
和kubectl
)可以代表可以通过任何身份提供商 dex 支持登录到集群的用户进行操作。
当用户通过 dex 登录时,用户的身份通常存储在另一个用户管理系统中:LDAP 目录、GitHub 组织等。Dex 充当客户端应用程序和上游身份提供者之间的垫片。客户端只需要了解 OpenID Connect 即可查询 dex,而 dex 实现了一系列用于查询其他用户管理系统的协议。
“连接器”是 dex 用于根据另一个身份提供商对用户进行身份验证的策略。 Dex 实现了针对特定平台(例如 GitHub、LinkedIn 和 Microsoft)以及既定协议(例如 LDAP 和 SAML)的连接器。
根据协议中的连接器限制,可能会阻止 dex 发出刷新令牌或返回组成员身份声明。例如,由于 SAML 不提供非交互式方式来刷新断言,因此如果用户通过 SAML 连接器登录,dex 不会向其客户端发出刷新令牌。需要离线访问的客户端(例如kubectl
需要刷新令牌支持。
Dex 实现了以下连接器:
姓名 | 支持刷新令牌 | 支持团体主张 | 支持首选用户名声明 | 地位 | 笔记 |
---|---|---|---|---|---|
LDAP | 是的 | 是的 | 是的 | 稳定的 | |
GitHub | 是的 | 是的 | 是的 | 稳定的 | |
SAML 2.0 | 不 | 是的 | 不 | 稳定的 | 警告:未维护且可能容易受到身份验证绕过 (#1884) |
GitLab | 是的 | 是的 | 是的 | 贝塔 | |
OpenID 连接 | 是的 | 是的 | 是的 | 贝塔 | 包括 Salesforce、Azure 等。 |
OAuth 2.0 | 不 | 是的 | 是的 | 阿尔法 | |
谷歌 | 是的 | 是的 | 是的 | 阿尔法 | |
领英 | 是的 | 不 | 不 | 贝塔 | |
微软 | 是的 | 是的 | 不 | 贝塔 | |
授权代理 | 不 | 是的 | 不 | 阿尔法 | 身份验证代理,例如 Apache2 mod_auth 等。 |
比特桶云 | 是的 | 是的 | 不 | 阿尔法 | |
开放式班次 | 是的 | 是的 | 不 | 阿尔法 | |
阿特拉斯人群 | 是的 | 是的 | 是的 * | 贝塔 | Preferred_username 声明必须通过 config 配置 |
吉泰亚 | 是的 | 不 | 是的 | 贝塔 | |
OpenStack 基石 | 是的 | 是的 | 不 | 阿尔法 |
稳定版、贝塔版和阿尔法版定义为:
连接器功能的所有更改或弃用都将在发行说明中公布。
有关报告漏洞的详细信息,请参阅我们的安全政策。
当所有编码和测试完成后,请运行测试套件:
make testall
为了获得最佳的开发人员体验,请安装 Nix 和 direnv。
或者,手动或使用包管理器安装 Go 和 Docker。通过运行make deps
安装其余依赖项。
发布流程请阅读发布文档。
该项目根据 Apache 许可证 2.0 版获得许可。