[!NOTE] 技术文档:若要了解完整的系统架构设计、核心配置选项、高可用部署方案、安全加固报告及 API 参考,请访问 技术文档门户。
Sienne-idp 是一个基于 Go 的 Identity Provider,实现 OAuth2 与 OpenID Connect。项目采用无状态应用节点 + MySQL + Redis 的架构,覆盖会话状态、令牌生命周期、防重放、MFA、审计日志和签名密钥轮转等生产向能力。
idp-server/cmd/idp: 应用入口。idp-server/internal/application: 用例编排和业务流程。idp-server/internal/interfaces/http: HTTP handler、中间件、DTO 与路由。idp-server/internal/infrastructure: MySQL、Redis、密码学、审计流和外部 OIDC 集成。idp-server/internal/plugins: 可插拔的认证、客户端认证和 grant 处理器。idp-server/scripts: 数据库迁移和 Redis Lua 脚本。idp-server/deploy: Kubernetes 与 Podman 部署示例。idp-server/internal/interfaces/http/router.go。idp-server/internal/bootstrap/config.go。idp-server/internal/bootstrap/providers.go。idp-server/internal/application/authz。idp-server/internal/application/token 和 idp-server/internal/plugins/grant。idp-server/internal/application/authn, idp-server/internal/application/mfa, idp-server/internal/application/passkey。idp-server/internal/infrastructure/cache/redis。idp-server/scripts/migrate.sql。使用预构建镜像栈:
docker compose -f compose.quickstart.yaml up -d
curl -sS http://localhost:8080/healthz
curl -sS http://localhost:8080/.well-known/openid-configuration
本地源码构建:
cd idp-server
docker compose up -d --build
curl -sS http://localhost:8080/healthz
运行测试:
cd idp-server
go test ./...
迁移文件中包含用于本地开发的演示用户、OAuth client 和协议样本数据。所有 fixture 凭据都应视为公开测试数据,不能在本地开发以外复用,也不应作为真实环境的 secret、签名密钥或加密密钥。
配置可以来自 YAML 文件和环境变量。公开仓库只应提交示例配置;真实 .env、私钥和部署 secret 必须留在 git 之外。
常用配置:
ISSUER, TOTP_ISSUER, LISTEN_ADDR, SESSION_TTL, APP_ENV。MYSQL_DSN,或 MYSQL_HOST, MYSQL_PORT, MYSQL_DATABASE, MYSQL_USER, MYSQL_PASSWORD。REDIS_ADDR,或 REDIS_HOST, REDIS_PORT, REDIS_PASSWORD, REDIS_DB, REDIS_KEY_PREFIX。FORCE_MFA_ENROLLMENT, LOGIN_FAILURE_WINDOW, LOGIN_MAX_FAILURES_PER_IP, LOGIN_MAX_FAILURES_PER_USER, LOGIN_USER_LOCK_THRESHOLD, LOGIN_USER_LOCK_TTL。TOTP_SECRET_ENCRYPTION_KEY, JWT_KEY_ID, SIGNING_KEY_DIR, SIGNING_KEY_BITS, SIGNING_KEY_CHECK_INTERVAL, SIGNING_KEY_ROTATE_BEFORE, SIGNING_KEY_RETIRE_AFTER。FEDERATED_OIDC_ISSUER, FEDERATED_OIDC_CLIENT_ID, FEDERATED_OIDC_CLIENT_SECRET, FEDERATED_OIDC_REDIRECT_URI, FEDERATED_OIDC_PROVIDER_NAME。如果要本地测试 Google OIDC,请在 Google Cloud Console 创建 Web Application OAuth Client,将回调配置为本地 issuer 下的 /login,然后通过私有 shell 环境或未跟踪的 .env 注入 client 参数。
发布前请确认:
.env, .env.*, 本地 YAML override、私钥、证书、构建产物都不进入 git。compose.quickstart.yaml 中的默认值只用于启动演示,生产使用前必须逐项替换。/register, /login, /login/totp, /mfa/totp/setup, /mfa/passkey/setup, /consent, /device。/logout, /logout/all, /connect/logout。/.well-known/openid-configuration, /oauth2/authorize, /oauth2/token, /oauth2/device/authorize, /oauth2/introspect, /oauth2/userinfo, /oauth2/jwks。/admin, /admin/rbac/roles, /admin/rbac/usage, /admin/rbac/bootstrap, /admin/users/:user_id/role, /admin/users/:user_id/logout-all。应用支持文件型签名密钥,适合本地开发;多副本部署建议使用 KMS、Vault 或受保护的共享存储,并明确密钥轮转的执行者。不要公开私钥或真实环境文件。
本项目采用 Apache 2.0 许可证 进行开源。
$ claude mcp add sienne \
-- python -m otcore.mcp_server <graph>