Kratos
- ory/kratos 是什么 ?
- API first 用户管理
- Identity Infrastructure Service
- 对比 Identity and Access Management (IAM), Identity Management (IdM), Identity Provider (IP/IdP), Identity as a Service (IDaaS)
- Username + Password -> Cookie, Token
- Email + Password -> Cookie, Token
- Passwordless login -> Cookie, Token
- 可当作库来使用
- 主要解决问题
- 凭证管理 - 密码、恢复邮箱、安全问题
- 认证 - 安全登录、会话、设备
- 账号信息管理 - profile、邮箱、密码
- 账号管理 - CRUD
- 身份信息管理 - 名字、照片、生日
- 适用场景
- 不涉及第三方登陆,希望登陆后拿到 Token
- Self-service Login and Registration
- Multi-Factor Authentication
- Account Verification
- Account Recovery
- Profile and Account Management
- Admin APIs
caution
- 不要在浏览器使用 API flow - 使用 HTML form
- 目前不支持 MFA - 多因素验证 - 不支持短信
- 前端需要自行实现,但相对容易
Flow
- 注册
- /self-service/registration/browser
- 登陆
- /self-service/login/browser
- 注销
- 验证
/self-service/verification/methods/link?token=${TOKEN}
- User Settings
- Account Recovery
- Address Verification
- User-Facing Error
- 2FA / MFA
配置
# 密码参数
kratos hashers argon2 calibrate 1s
SDK
- REST API
- Go client
- Admin
- 系统信息接口
- /health/alive
- /health/ready
- /metrics/prometheus
- 业务接口
- /identities
- /recovery/link
- 系统信息接口
- Public
- /schemas/{id}
- /self-service/browser/flows/logout
- /self-service/browser/flows/registration/strategies/oidc/settings/connections
- /self-service/errors?error=string
- /version
- 登陆/login 流程
- /self-service/login/browser - 初始化浏览器登陆流程
- /self-service/login/api - 初始化 API 登陆流程
- 不要在浏览器使用
- 用于 移动设备,智能电视 等
/self-service/login/flows?flow=string
- 获取注册流程信息/self-service/login/methods/password?flow=string
- 完成密码登陆流程
- 注册/registration 流程
- /self-service/registration/browser
- /self-service/registration/api
/self-service/registration/flows?flow=string
- /self-service/registration/methods/password
- 恢复/recovery 流程
- /self-service/recovery/browser
- /self-service/recovery/api
/self-service/recovery/flows?id=string
- /self-service/recovery/methods/link
- 设置/setting
- /self-service/settings/api
- /self-service/settings/browser/flows
- /self-service/settings/flows?id=string
- /self-service/settings/methods/password - 修改密码
- /self-service/settings/methods/profile - 修改信息
- 验证/verification
- /self-service/verification/api
- /self-service/verification/browser
- /self-service/verification/flows?id=string
- /self-service/verification/methods/link
- 会话管理
- DELETE /sessions -
{"session_token": "string"}
- GET /sessions/whoami
- DELETE /sessions -
Serve
export DSN=sqlite:///tmp/kratos.sqlite?_fk=true
./kratos -c ./contrib/quickstart/kratos/email-password migrate sql -e --yes
LOG_LEVEL=trace ./kratos serve -c /etc/config/kratos/kratos.yml --dev
Get Started
git clone https://github.com/ory/kratos.git
cd kratos
# 切换到最新版本
git checkout v0.5.4-alpha.1
docker pull oryd/kratos:latest-sqlite
docker pull oryd/kratos-selfservice-ui-node:latest
# 4455 - http://github.com/ory/kratos-selfservice-ui-node
# 4433 - Kratos Public API
# 4434 - Kratos Admin API
# 4436 - https://github.com/mailslurper - 开发用的 SMTP 服务器
# 入口 http://127.0.0.1:4455/dashboard
docker-compose -f quickstart.yml -f quickstart-standalone.yml up --build --force-recreate
# 清理
docker-compose -f quickstart.yml down -v
docker-compose -f quickstart.yml rm -fsv
- /dashboard -> /auth/login
- 未登录重定向
- /auth/login -> http://127.0.0.1:4433/self-service/login/browser
- 无 flowid 重定向
- 设置 cookie csrf_token
- ->
/auth/login?flow=<flow_id>
- 显示登陆
- ->
http://kratos:4434/self-service/login/flows?id=<flow_id>
- 表单提交
# 登陆信息
curl -s "http://127.0.0.1:4434/self-service/login/flows?id=<flow_id>" | jq
# 注册信息
curl -s "http://127.0.0.1:4434/self-service/registration/flows?id=<flow_id>" | jq