Zitadel:开源身份认证与授权平台完全指南
Zitadel开源身份认证与授权平台完全指南背景身份认证是应用安全的第一道防线。现代应用通常需要用户注册登录、第三方社交登录、API 授权等身份管理功能。从零开发一套安全可靠的身份认证系统需要投入大量精力。使用成熟的身份认证服务商可以快速解决问题但数据隐私和成本控制又是新的顾虑。Zitadel 作为开源的身份认证平台提供了企业级的身份和访问管理能力同时支持完全自托管部署让团队完全掌控认证数据。本文分享 Zitadel 的部署与使用经验帮助技术团队构建安全、灵活的身份认证体系。一、项目概述与核心特性Zitadel 是一个开源的身份和访问管理平台GitHub Stars 数超过 10K。其设计目标是成为 Auth0、Okta 等商业产品的开源替代方案提供完整的企业级功能同时保持部署灵活性。标准协议支持Zitadel 原生支持 OAuth 2.0、OpenID Connect (OIDC)、SAML 2.0 等行业标准认证协议。这意味着任何支持这些标准协议的应用都可以安全地集成 Zitadel无需为每个应用单独开发认证逻辑。多因素认证 (MFA/2FA)内置对 TOTPGoogle Authenticator、Microsoft Authenticator 等、WebAuthn/FIDO2硬件安全密钥、邮件验证码等多种二次验证方式的支持。可以按组织或项目强制要求用户启用 MFA。无密码认证支持 WebAuthn 无密码登录用户可以使用指纹、面部识别或硬件密钥登录告别传统密码。社交登录开箱即用支持 Google、GitHub、Microsoft、SAML/SSO 等主流第三方登录方式降低用户注册门槛。企业级 SSO支持通过 SAML 2.0 或 OIDC 与企业身份提供商Active Directory、Okta、Azure AD 等集成实现企业单点登录。角色与权限管理提供细粒度的 RBAC基于角色的访问控制功能。支持定义角色、分配权限、控制资源访问级别。组织与项目隔离Zitadel 设计为多租户架构支持创建多个组织和项目每个组织可以独立管理用户、应用和配置。审计日志完整记录所有认证事件、用户操作和管理员行为便于安全审计和合规要求。提供 RESTful API 和 GraphQL API所有管理功能都可以通过 API 调用支持自动化运维和定制化集成。二、Docker Compose 部署教程环境准备Zitadel 的 Docker 部署需要服务器满足以下要求Docker Engine 24.0Docker Compose v2.x最低 2GB 内存推荐 4GB10GB 可用磁盘空间支持 Linux AMD64Zitadel 支持 PostgreSQL 作为数据库推荐使用与 Zitadel 官方 Docker Compose 配置。快速部署创建 Zitadel 专用目录mkdir-p~/zitadelcd~/zitadel创建docker-compose.yamlversion:3.8services:zitadel:image:ghcr.io/zitadel/zitadel:latestcontainer_name:zitadelhostname:zitadelports:-8080:8080-8081:8081volumes:-./data:/var/lib/zitadelenvironment:-ZITADEL_DATABASE_POSTGRES_HOSTpostgres-ZITADEL_DATABASE_POSTGRES_PORT5432-ZITADEL_DATABASE_POSTGRES_USERpostgres-ZITADEL_DATABASE_POSTGRES_PASSWORDzitadel_password-ZITADEL_DATABASE_POSTGRES_DBzitadel-ZITADEL_DATABASE_POSTGRES_SSL_MODEdisable-ZITADEL_FIRSTINSTANCE_ORG_MACHINE_USERNAMEadmin-ZITADEL_FIRSTINSTANCE_ORG_MACHINE_PASSWORDAdmin123-ZITADEL_FIRSTINSTANCE_ORG_NAMEInitialdepends_on:-postgresrestart:unless-stoppednetworks:-zitadel-networkpostgres:image:postgres:16-alpinecontainer_name:postgreshostname:postgresenvironment:-POSTGRES_USERpostgres-POSTGRES_PASSWORDzitadel_password-POSTGRES_DBzitadelvolumes:-./postgres-data:/var/lib/postgresql/datarestart:unless-stoppednetworks:-zitadel-networknetworks:zitadel-network:driver:bridge启动 Zitadel 服务dockercompose up-dZitadel 首次启动会自动初始化数据库约需等待 1 分钟。使用浏览器访问管理控制台http://服务器IP:8080gRPC APIhttp://服务器IP:8081生成安全的 Masterkey生产环境应使用随机生成的 Masterkey32 字节十六进制字符串# 生成 32 字节随机密钥openssl rand-hex32将生成的密钥添加到环境变量environment:-ZITADEL_MASTERKEYyour-generated-masterkey-here使用外部 PostgreSQL如果使用已有的 PostgreSQL 数据库服务修改数据库配置指向外部实例environment:-ZITADEL_DATABASE_POSTGRES_HOSTyour-postgres-host-ZITADEL_DATABASE_POSTGRES_PORT5432-ZITADEL_DATABASE_POSTGRES_USERyour-user-ZITADEL_DATABASE_POSTGRES_PASSWORDyour-password-ZITADEL_DATABASE_POSTGRES_DBzitadel三、快速入门与基础使用访问管理控制台首次访问 Zitadel 管理控制台浏览器访问http://服务器IP:8080使用初始化时设置的机器用户名admin和密码Admin123登录首次登录后会提示创建初始组织Organization创建第一个应用在 Zitadel 中注册需要认证的客户端应用进入「Projects」→「New Project」输入项目名称如「MyApp」创建应用点击项目 → 「Applications」→「New」选择应用类型Web传统 Web 应用使用 Session CookieAPI后端服务或 SPA使用 TokenNative桌面或移动应用SAML支持 SAML 协议的应用配置认证方式Authorization Code标准 OAuth2 授权码流程推荐用于 Web 应用Client Credentials客户端凭证模式用于服务间认证PKCE增强的安全授权码流程用于 SPA 和移动应用获取客户端凭据创建应用后保存以下信息用于应用集成# 应用配置Client ID:your-client-idClient Secret:your-client-secretAuth URL:http://服务器IP:8080/oauth/v2/authorizeToken URL:http://服务器IP:8080/oauth/v2/tokenUserinfo URL:http://服务器IP:8080/oidc/v1/userinfoLogout URL:http://服务器IP:8080/oidc/v2/logout集成到应用Node.js Express 应用示例安装依赖npminstallopenid-client passport集成代码示例const{Issuer}require(openid-client);asyncfunctionsetupAuth(){constissuerawaitIssuer.discover(http://服务器IP:8080);constclientnewissuer.Client({client_id:your-client-id,client_secret:your-client-secret,redirect_uris:[http://localhost:3000/callback],post_logout_redirect_uris:[http://localhost:3000],});returnclient;}// 登录路由app.get(/login,async(req,res){constclientawaitsetupAuth();consturlclient.authorizationUrl({scope:openid profile email,});res.redirect(url);});// 回调路由app.get(/callback,async(req,res){constclientawaitsetupAuth();consttokenSetawaitclient.callback(req.url);// 获取用户信息constuserinfoawaitclient.userinfo(tokenSet.access_token);console.log(User:,userinfo);res.send(登录成功);});Python Flask 应用示例安装依赖pipinstallauthlib requests集成代码示例fromauthlib.integrations.flask_clientimportOAuth oauthOAuth(app)oauth.register(namezitadel,client_idyour-client-id,client_secretyour-client-secret,server_metadata_urlhttp://服务器IP:8080/.well-known/openid-configuration,client_kwargs{scope:openid profile email})app.route(/login)deflogin():returnoauth.zitadel.authorize_redirect(redirect_uriurl_for(callback,_externalTrue))app.route(/callback)defcallback():tokenoauth.zitadel.authorize_redirect(redirect_uriurl_for(callback,_externalTrue))respoauth.zitadel.get(http://服务器IP:8080/oidc/v1/userinfo,tokentoken)user_inforesp.json()returnfUser:{user_info}四、高级功能与最佳实践多因素认证 (MFA) 配置Zitadel 支持多种 MFA 方式可以在组织或项目级别强制启用。启用 TOTP MFA进入「Settings」→「Login Registration」找到「Multi-factor Authentication」设置启用 TOTPTime-based One-Time Password保存设置用户登录后在个人资料中绑定 authenticator 应用用户登录后进入「My Security」点击「Add MFA」选择 TOTP使用 Google Authenticator 等应用扫描二维码输入验证码完成绑定强制 MFA管理员可以在组织级别强制用户使用 MFA进入「Organization Settings」→「Login Registration」启用「Force MFA」选择强制 MFA 的时机首次登录、每次登录、指定时间后社交登录配置Zitadel 支持配置第三方社交登录。GitHub 登录配置在 GitHub Developer Settings 创建 OAuth App设置回调 URLhttp://服务器IP:8080/ui/console/callback获取 Client ID 和 Client Secret在 Zitadel 中进入「Settings」→「Identity Providers」添加 GitHub 提供商填入凭据用户登录页面会出现 GitHub 登录选项。角色与权限管理Zitadel 的 RBAC 能力支持精细化的权限控制。创建角色进入「Projects」→「MyApp」→「Roles」点击「New Role」定义角色 ID 和显示名称添加角色描述分配权限进入「Users」或「Members」选择用户或添加新成员分配项目角色应用获取 Token 时可以请求特定角色consturlclient.authorizationUrl({scope:openid profile email,resource:urn:zitadel:project:myapp,// 项目标识});单点登录 (SSO) 配置企业用户可以通过 SSO 直接使用企业账号登录。SAML 2.0 SSO在 Zitadel 中创建 SAML Identity Provider获取 Zitadel 的 SAML 元数据 URL在企业 IdPOkta、Azure AD 等中配置新应用将 Zitadel 元数据提供给企业 IdP配置属性映射email、name 等配置完成后企业用户访问应用时会自动跳转到企业 IdP 进行认证。自定义登录页面Zitadel 允许自定义登录流程和界面样式。自定义样式通过设置 CSS 变量覆盖默认主题:root{--primary-color:#3B82F6;--background-color:#F3F4F6;}自定义文案可以覆盖默认的界面文案和错误消息。审计日志Zitadel 自动记录所有认证和管理事件。查看审计日志进入「Auditing」筛选时间范围、事件类型、操作者查看详细事件信息导出日志支持将日志导出为 CSV 格式用于分析点击「Export」选择时间范围和筛选条件下载 CSV 文件API 自动化Zitadel 提供完整的 API 用于自动化运维。获取 Service User Token创建 Machine User进入「Users」→「New」→「Machine User」创建 PATPersonal Access Token用户设置 → 「Tokens」→ 「New Token」保存 Token使用 PAT 调用管理 APIcurl-XGEThttp://服务器IP:8080/admin/v1/users\-HAuthorization: Bearer your-pat-token五、常见问题与解决方案Q1如何重置管理员密码如果忘记管理员密码可以通过命令行重置dockerexec-itzitadel zitadel rootkeyadd--usernameadmin这会生成一个新的管理员密钥用于恢复访问。Q2Client Secret 泄露怎么办立即轮换 Secret进入应用设置点击「Regenerate Secret」更新应用配置中的 Secret在「Security」→「Sessions」中可以查看所有活跃会话必要时可以撤销所有会话。Q3如何迁移 Zitadel 实例完整迁移步骤停止服务备份 PostgreSQL 数据库备份 Zitadel 数据目录在新环境恢复数据修改新环境的域名配置Q4支持高可用部署吗Zitadel 支持集群部署多个 Zitadel 实例共享同一个 PostgreSQL使用负载均衡器分发请求会话状态存储在数据库中无状态扩展建议配合健康检查和自动故障转移实现高可用。Q5如何对接已有用户库Zitadel 提供多种用户同步方案LDAP/AD 同步通过 LDAP 导入企业用户SCIM 协议支持标准 SCIM 2.0 进行用户配置自动化自定义 Webhook监听用户变更事件同步到外部系统六、总结Zitadel 作为开源身份认证平台的优秀代表提供了企业级 IAM 系统的完整功能同时支持完全自托管部署。通过 Docker Compose 可以快速搭建包含身份认证、授权管理、MFA、SSO 在内的完整认证体系。OAuth 2.0 和 OIDC 标准协议的原生支持使集成变得简单可靠。对于注重数据隐私、希望掌控认证基础设施的团队Zitadel 是构建安全身份认证体系的可靠选择。© 版权归无边界科技所有发表评论请注明出处。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2523748.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!