自定义认证提供商
如何在不重复核心认证逻辑的情况下添加自定义登录提供商(包括企业定制分支)。
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.tsapps/server/sources/app/auth/methods/modules/*
添加自定义验证方式(企业定制分支)
若登录机制既非内置的密钥质询路由,也未通过 OAuth/OIDC 配置实现,那么“验证方式”就是理想的扩展点。
-
新建验证方式模块,例如:
apps/server/sources/app/auth/methods/modules/acmeAuthMethodModule.ts
-
实现
AuthMethodModule:- 类型定义:
apps/server/sources/app/auth/methods/types.ts - 参考实现(mTLS):
apps/server/sources/app/auth/methods/modules/mtlsAuthMethodModule.ts
- 类型定义:
-
将模块添加到
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