跳转到内容

Complete Auth Plugin

Complete Auth 是独立插件仓库,不属于 Plystra Core。

Core 有意只保留最小认证面:受保护注册、密码登录、refresh/logout 和 actor context。应用需要 hosted-auth 风格能力时使用 Complete Auth,例如公开注册、email verification code 和 magic-link sign-in。

plystra/plugin-auth-complete

插件使用与 Core 相同的 PostgreSQL 数据库,拥有自己的 plugin tables,并在成功登录或 magic-link 消费后签发 Core-compatible session。公开注册不会创建 instance super-admin 权限。

MethodPath用途
POST/api/v1/auth/registerplugin_auth_settings 启用后允许公开注册。
POST/api/v1/auth/login密码登录。
POST/api/v1/auth/refresh刷新 session tokens。
POST/api/v1/auth/logout撤销 sessions。
POST/api/v1/auth/email-code创建并发送短生命周期 email verification-code challenge。
POST/api/v1/auth/email-code/verify校验 6 位 code 并消费 challenge。
POST/api/v1/auth/magic-link创建并发送短生命周期 magic-link challenge。
POST/api/v1/auth/magic-link/consume消费 magic-link token 并创建 Core-compatible session。
GET/healthPlugin health check。

只有 secrets 和进程启动值来自环境变量。非敏感、经常变化的运行时设置存入 plugin_auth_settings

设置默认值生产建议
public_registration_enabledfalse除非应用有明确 onboarding 策略,否则保持关闭。
email_delivery_modelog生产使用 capability
email_capability_urlempty实现 POST /contract/v1/email/send 的 HTTPS endpoint。
email_capability_timeout10s保持短且明确。
email_from_addressemptycapability mode 必填;必须是已验证 sender。
email_from_namePlystra非敏感 sender display name。
public_app_urlempty构造 fallback magic-link URL。
server_public_urlempty构造 fallback server URL。
magic_link_path/auth/consume应用 consume path。
allowed_redirect_origins[]额外 HTTPS redirect origins。
email_code_ttl10mVerification-code challenge TTL。
magic_link_ttl10mMagic-link challenge TTL。
auth_challenge_max_attempts5每个 challenge 最大验证尝试次数。
email_send_max_attempts3rate-limit window 内 challenge 发送尝试次数。
login_failure_limit8lockout 前允许的登录失败次数。
login_failure_window15m登录失败统计窗口。
login_failure_lockout15mlockout 时长。
max_request_body_bytes1048576JSON request body limit。
trusted_proxy_cidrs[]允许提供 forwarded client IP headers 的反向代理。

不要把 session secret、email capability bearer token、SMTP password 或 provider API credentials 存到该表。

变量何时必需用途
DATABASE_URL / PLYSTRA_DATABASE_URL始终与 Core 相同的 PostgreSQL database。
PLYSTRA_SESSION_SECRET始终与 Core 相同的 secret,用于兼容 Core session。
PLYSTRA_SESSION_SECRET_PREVIOUSsecret rotation轮换期间接受旧 session tokens。
PLYSTRA_EMAIL_CAPABILITY_TOKEN / EMAIL_CAPABILITY_TOKENemail_delivery_mode=capability发给 email capability provider 的 Bearer token。
AUTH_PLUGIN_LISTEN_ADDR可选HTTP bind address。

Complete Auth 只有在启用 email delivery 时拉取独立 email contract:

plystra/email-contracts
capability id: email.transactional
version: 0.0.1
level: standard
endpoint: POST /contract/v1/email/send

官方 provider implementations:

Provider repoRuntimeMutable settings
plystra/plugin-email-smtpNode/Nodemailer HTTP service非敏感 SMTP transport settings 在 plugin_email_smtp_settings;凭据在 secrets/env。
plystra/plugin-email-cloudflareCloudflare WorkerCloudflare send_email binding 和 EMAIL_CAPABILITY_TOKEN secret;sender 来自 contract request。
  • Public registration 默认关闭。
  • Public registration 只创建普通 active User 和 space_default 中的 Simple Mode 默认 binding;不会创建 instance super-admin grant。
  • Codes 和 magic-link tokens 一次性使用,且只保存 HMAC hash。
  • 发送和验证尝试都会限流。
  • 生产必须使用 email_delivery_mode=capability 和 HTTPS capability URL。
  • Magic-link redirect URL 必须使用 HTTPS,并匹配 public_app_urlserver_public_urlallowed_redirect_origins
  • Provider credentials 必须留在 source-controlled config 和非敏感 settings tables 之外。

从父级 Plystra workspace 构建,这样 local email-contracts module replacement 可用:

Terminal window
cd plystra
docker build -f plugin-auth-complete/Dockerfile -t plystra-auth-complete .

启动插件前先应用 plugin SQL migrations。插件服务应在 Core/PostgreSQL ready 后运行,并暴露 /health 给编排系统。