ory kratos是独立http身份服务,非kratos框架插件;go微服务须通过/self-service/等rest api与其通信,禁止直连数据库或复用go包,所有交互依赖其http端点与session token。

Ory Kratos 不是 Go 微服务框架的插件,它是一个独立运行的、基于 HTTP 的身份服务。你不能把它“集成进 Kratos 框架”里当一个中间件用——这是最容易踩的坑。
部署它的核心动作是:让它作为独立服务暴露 API,你的 Go 微服务(无论用 kratos、gin 还是其他)只负责调用它的 /self-service/ 系列端点,比如 /self-service/login/browser 或 /self-service/registration/api。
kratos 框架服务如何与 Kratos 通信?别直连数据库,走 HTTP API
你的 Go 微服务(比如用户中心 BFF)不该访问 Kratos 的 PostgreSQL 数据库,也不该复用它的 Go 包。所有交互必须走官方 REST API:
-
Kratos启动后默认监听http://kratos:4433(内部)或https://auth.example.com(对外) - 你的服务发
GET /self-service/login/flows?id=xxx获取登录流程 - 提交表单时发
POST /self-service/login?flow=xxx,携带method=password和凭证 - 成功后拿到
session_token或identity对象,再用它调用下游服务(如订单、支付) - 所有错误都来自 Kratos 的
400 Bad Request响应体,含error.reason字段,不是 Go 的error类型
自托管 Kratos 的最小可靠部署配置(Kubernetes + Helm)
直接用 helm install 官方 chart 是最稳的起点,别手写全套 YAML:
- Chart 来源:
https://github.com/ory/k8s/tree/master/helm/charts/kratos - 必须覆盖的值:
config.secrets.default(至少 32 字节随机字符串)、config.dsn(PostgreSQL 连接串) - 必须启用
courier(邮件/SMS 通知),否则注册/验证流程卡死;它依赖 SMTP 或 Twilio 配置 - 不要禁用
selfservice.flows.settings.enabled,否则用户无法修改资料——哪怕你暂时不用,也得留着开关 - 健康检查路径设为
/health/ready,不是/health;后者不检查数据库连接
Kratos 与 Go 微服务共存时的鉴权链路怎么串?绕过 Oathkeeper 也能跑
如果你没上 Ory Oathkeeper,鉴权逻辑就得自己写在 BFF 层:
- 前端传来的
Authorization: Bearer xxx,先调GET /sessions/whoami验证 session 是否有效 - 响应中
identity.id是用户唯一 ID,identity.traits.email是邮箱,别解析 JWT —— Kratos 默认不发 JWT,发的是 opaque session token - 需要 RBAC?把
identity.traits.role字段写进 schema,并在注册/设置资料时允许更新;下游服务靠这个字段做判断 - 别在每个微服务里重复调
/sessions/whoami—— BFF 统一校验后,用context.WithValue()把identity注入 downstream 请求的 metadata
Kratos 的复杂点不在部署,而在流程状态管理:login flow、recovery flow、settings flow 都有生命周期和 redirect URL 跳转逻辑,这些 URL 必须由你的前端精确匹配,后端只管返回 302。漏掉任意一环,用户就会卡在白屏或 404。
golang免费学习笔记(深入):立即使用
在学习笔记中,你将探索golang的核心概念和高级技巧!











