ZITADEL 是什么
照例先放上项目地址: *
https://github.com/zitadel/zitadel
ZITADEL 是一个开源的身份和访问管理(Identity and Access Management, IAM)平台,这东西在国外的产品可以类比于 Okta 和 Auth0,国内我只用过 Authing 家的产品,不过无论是 Okta 还是 Authing 都要花钱买呀,而 ZITADEL 功能足够用,也支持私有部署(也有 Cloud-based 版本)全免费,社区也很活跃。
先说说 ZITADEL 有啥功能吧!常见的身份认证(用户名密码啊、OAuth2啊、SAML 等都支持)、MFA、RBAC、自助服务(有一个自助的 Portal 提供给用户,支持他们自助修改个人信息之类),最重要的是 ZITADEL 还有 API 和 SDK,而且文档很详尽!
ZITADEL 的优势在哪?
最大的优势:开源免费!当然了,开源免费这个优势是建立在产品靠谱的前提,还有一些优势,比如说 ZITADEL 在设计时就考虑到了复杂的多租户架构,而且它还具备处理客户身份管理(CIAM)所需的几乎全部功能,我简单总结了一下它的优势如下:
-
API 优先方法
-
多租户认证和访问管理
-
采用事件溯源模式,因此具有比较靠谱的审计追踪功能
-
身份验证页面的简单定制,例如可以针对自身改 Logo 啊、改提示词等等
-
为用户提供自助服务(例如改个人信息啊改密码等,用户有一个面板可以很方便的修改)
-
存储使用 CockroachDB 或 Postgres 两种 DB
ZITADEL 私有化部署
Docker Compose 文件如下:
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
version: '3.8'
services: zitadel: restart: 'always' networks: - 'zitadel' image: 'ghcr.io/zitadel/zitadel:latest' command: 'start-from-init --masterkey "MasterkeyNeedsToHave32Characters" --tlsMode disabled' environment: - 'ZITADEL_DATABASE_POSTGRES_HOST=db' - 'ZITADEL_DATABASE_POSTGRES_PORT=5432' - 'ZITADEL_DATABASE_POSTGRES_DATABASE=zitadel' - 'ZITADEL_DATABASE_POSTGRES_USER_USERNAME=zitadel' - 'ZITADEL_DATABASE_POSTGRES_USER_PASSWORD=zitadel' - 'ZITADEL_DATABASE_POSTGRES_USER_SSL_MODE=disable' - 'ZITADEL_DATABASE_POSTGRES_ADMIN_USERNAME=postgres' - 'ZITADEL_DATABASE_POSTGRES_ADMIN_PASSWORD=postgres' - 'ZITADEL_DATABASE_POSTGRES_ADMIN_SSL_MODE=disable' - 'ZITADEL_EXTERNALSECURE=false' depends_on: db: condition: 'service_healthy' ports: - '8080:8080'
db: restart: 'always' image: postgres:16-alpine environment: - POSTGRES_USER=postgres - POSTGRES_PASSWORD=postgres - POSTGRES_DB=zitadel networks: - 'zitadel' healthcheck: test: ["CMD-SHELL", "pg_isready", "-d", "zitadel", "-U", "postgres"] interval: '10s' timeout: '30s' retries: 5 start_period: '20s' ports: - '5432:5432'
networks: zitadel:
启动:
Zitadel 使用展示
使用 Dockers 本地部署之后,我们访问如下 url: *
http://localhost:8080/ui/console
使用默认用户名密码登进系统: * *
username: zitadel-admin@zitadel.localhostpassword: Password1!
如下:
我们像用 SAML 验证,那就创建应用来测试:
点击 Continue 之后如下:
这界面就和我们平时使用到的商业化 IDP 一模一样,一步一步设置好 Redirect URLs 最后测试即可。
SDK 支持的框架
文档给出了以上框架集成 ZITADEL 的示例代码: *
https://zitadel.com/docs/sdk-examples/introduction
APIs
API文档如下:
*
https://zitadel.com/docs/category/apis/resources/auth/policies
ZITADEL 可以通过 APIs 支持很多操作,例如很关键的用户导入与迁移 :
*
https://zitadel.com/docs/apis/resources/admin/admin-service-import-data
批量导入的 Base URL 是 :
*
https://$CUSTOM-DOMAIN/admin/v1
body 示例:
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
{ "timeout": "10m", "data_orgs": { "orgs": [ { "orgId": "104133391254874632", "org": { "name": "ACME" }, "humanUsers": [ { "userId": "104133391271651848", "user": { "userName": "test9@test9", "profile": { "firstName": "Road", "lastName": "Runner", "displayName": "Road Runner", "preferredLanguage": "de" }, "email": { "email": "test@acme.tld", "isEmailVerified": true }, "hashedPassword": { "value": "$2a$14$aPbwhMVJSVrRRW2NoM/5.esSJO6o/EIGzGxWiM5SAEZlGqCsr9DAK", "algorithm": "bcrypt" } } }, { "userId": "120080115081209416", "user": { "userName": "testuser", "profile": { "firstName": "Test", "lastName": "User", "displayName": "Test User", "preferredLanguage": "und" }, "email": { "email": "fabienne@caos.ch", "isEmailVerified": true }, "hashedPassword": { "value": "$2a$14$785Fcdbpo9rn5L7E21nIAOJvGCPgWFrZhIAIfDonYXzWuZIKRAQkO", "algorithm": "bcrypt" } } }, { "userId": "145195347319252359", "user": { "userName": "wile@test9", "profile": { "firstName": "Wile E.", "lastName": "Coyote", "displayName": "Wile E. Coyote", "preferredLanguage": "en" }, "email": { "email": "wile.e@acme.tld" } } } ] } ] }}
除了迁移用户之外,ZITADEL 还支持密码迁移,不过这里需要 ZITADEL 支持你导入密码的哈希算法,如下: * * * * *
argon2i / idbcrypt (Default)md5scryptpbkdf2
操作文档如下,很简单,有示例代码滴:
*
https://zitadel.com/docs/concepts/architecture/secrets#hashed-secrets
结语
总的来说,ZITADEL 作为开源且免费的工具,已经能提供很全面的身份认证、授权和管理等功能了,而且这些功能对于绝大部分中小型企业来说是绰绰有余的;不仅支持私有化部署,还可以通过 API 和 SDK 与应用无缝集成,我认为假设你们公司正在找一个免费开源的 IAM 解决方案,可以试一试 ZITADEL 咯,真的很实用呀!