无极开物Docs

自定义认证提供商

如何在不重复核心认证逻辑的情况下添加自定义登录提供商(包括企业定制分支)。

Kaiwu 服务端支持提供商模块注册表,无需重写核心路由编排或 /v1/features 通告逻辑,即可扩展新的身份验证机制。

核心设计思路:

  • 每种身份验证机制对应一个验证方式(auth method)。
  • 一种验证方式可支持多种操作(例如:login、provision、connect)。
  • 服务端通过 capabilities.auth.methods[] 统一对外通告支持的验证方式。

提供商模块(服务端)

提供商模块位于:

  • apps/server/sources/app/auth/providers/*

注册表组装于:

  • apps/server/sources/app/auth/providers/providerModules.ts

每个模块均可提供一个或多个切面(facet):

  • oauth:编排 OAuth 重定向与回调流程(例如 GitHub/OIDC)
  • identity:身份关联以及离职/注销资格校验
  • auth:在 capabilities.auth.providers 下公开提供商状态与支持的功能

非 OAuth 验证方式(如 mTLS)则通过验证方式注册表单独注册:

  • apps/server/sources/app/auth/methods/registry.ts
  • apps/server/sources/app/auth/methods/modules/*

添加自定义验证方式(企业定制分支)

若登录机制既非内置的密钥质询路由,也未通过 OAuth/OIDC 配置实现,那么“验证方式”就是理想的扩展点。

  1. 新建验证方式模块,例如:

    • apps/server/sources/app/auth/methods/modules/acmeAuthMethodModule.ts
  2. 实现 AuthMethodModule:

    • 类型定义:apps/server/sources/app/auth/methods/types.ts
    • 参考实现(mTLS):apps/server/sources/app/auth/methods/modules/mtlsAuthMethodModule.ts
  3. 将模块添加到 apps/server/sources/app/auth/methods/registry.ts 中的 staticAuthMethodModules 进行注册。

完成上述步骤后:

  • authRoutes(...) 将自动注册你的登录路由。
  • 服务端在启动时会依据通告的 capabilities.auth.methods[] 操作执行防锁定检查;正确配置时,请确保该验证方式至少上报一个已启用的 login/provision 操作。
  • /v1/features 会通过 capabilities.auth.methods[] 通告这些验证方式,便于客户端明确获知并渲染对应选项。

UI 注意事项

在服务端添加登录提供商不会自动生成前端 UI 登录流程。

内置的 mTLS 流程实现方式如下:

  • Web 端:POST /v1/auth/mtls
  • 移动端交接:/v1/auth/mtls/start → /v1/auth/mtls/complete → POST /v1/auth/mtls/claim

企业分支可以参照此方式实现自定义 UI 流程,同时继续复用核心层提供的通用登录提供商注册与功能通告机制。

© 乾元执中(南京)科技有限公司 · WUJI-Labs

On this page