认证与鉴权(JWT + Internal API Key)

本页描述 LawSeekDog 的“对外认证”与“对内调用鉴权”约定(以 ai-boot-framework 与现有服务配置为准)。

1) 对外:JWT(可按服务启用)

业务微服务默认具备 JWT 资源服务器能力入口(是否启用由配置决定):

  • 配置前缀:ai.boot.security.jwt.*
  • 常用 claim:
    • user_id(默认)
    • user_type(可选)
    • organization_id(可选)

在 Java 服务内,JWT claims 会被桥接写入 RequestContext,用于:

  • 审计字段(created_by/updated_by/organization_id
  • 日志链路字段(MDC 透传)

说明:

  • 模板工程本地默认 jwt.enabled=false,便于快速启动;生产建议开启并把密钥/公钥放到 K8s Secret。

2) 对内:X-Internal-Api-Key(强制)

所有 Java 服务的 /api/v1/internal/** 必须校验内部密钥:

  • Header:X-Internal-Api-Key: <shared-secret>
  • 失败:返回 401 Unauthorized(统一返回体)

该机制用于“服务间调用”与“运维/seed 导入”等内部链路。

建议(生产):

  • internal key 由平台统一下发(K8s Secret → env)
  • 配合 NetworkPolicy/ServiceMesh 做网络层隔离(即使 key 泄露也缩小攻击面)

3) Python 服务(ai-engine / collector-service)

Python 服务属于 internal-only 服务形态:

  • 入口一般不直接暴露给公网
  • 上游(Java 服务)通过 internal 网络访问其 /api/v1/internal/** 接口
  • internal key 建议同样通过 header 透传(与 Java 侧一致),避免“跨语言两套鉴权”

具体 header 校验以 Python 侧实现为准;当前以“网络隔离 + 上游校验”为主。