51工具盒子

依楼听风雨
笑看云卷云舒,淡观潮起潮落

私有化部署、免费、开源的 IDP(IAM) 不香吗?强烈推荐使用 ZITADEL!

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 咯,真的很实用呀!

赞(9)
未经允许不得转载:工具盒子 » 私有化部署、免费、开源的 IDP(IAM) 不香吗?强烈推荐使用 ZITADEL!