使用说明
OAuth😎
📌 概述
MCP客户端的最低OAuth 2.0授权服务器,使用Quarkus构建。它支持:
- 动态客户端注册(DCR)
- 授权码+PKCE(S256)
- 通过旋转刷新令牌
- 带有JWKS发布的ES256访问令牌
- 谷歌OIDC登录
- 用户、客户端、身份验证请求、身份验证代码和刷新令牌的Firestore持久性
此服务设计为作为独立的身份验证服务器运行,独立于API和MCP服务器。它直接针对谷歌云(Cloud Run+Firestore)。
有关该项目的更多信息,请访问 https://diy.elmolidelanoguera.com/2026/01/un-servidor-de-autenticacion-con-google.html.
⚙️ 环境配置
.env.example 列出此项目使用的不在存储库中的环境变量。复制到 .env 并填写实际值。如何装载 .env 这取决于你的操作系统。这 .env 文件未提交。这 .bat 用于设置环境或部署的助手是示例,必须适应您的系统。
核心OAuth
EMP_OAUTH_ISSUER:此身份验证服务器的公共颁发者URL。EMP_OAUTH_DEFAULT_RESOURCE:默认资源/受众(如果未提供)。EMP_OAUTH_AUTH_CODE_TTL_SECONDS:身份验证代码生存期(秒)。EMP_OAUTH_AUTH_REQUEST_TTL_SECONDS:挂起的身份验证请求生存期(秒)。EMP_OAUTH_ACCESS_TOKEN_TTL_SECONDS:访问令牌生存期(秒)。EMP_OAUTH_REFRESH_TOKEN_TTL_SECONDS:刷新令牌生存期(秒)。EMP_OAUTH_AUTO_CONSENT:如果true,登录后跳过同意屏幕。EMP_OAUTH_CONSENT_BRAND_NAME:同意页面上显示的品牌文本。EMP_OAUTH_CLEANUP_CLIENTS_INACTIVE_DAYS:在清理删除客户端之前,处于非活动状态的天数。
钥匙和JWKS(ES256)
EMP_OAUTH_PUBLIC_KEY_PATH:ES256公钥PEM的路径。EMP_OAUTH_PRIVATE_KEY_SECRET:ES256私钥的密钥管理器资源。EMP_OAUTH_PRIVATE_KEY_PATH:ES256私钥PEM的本地回退。EMP_OAUTH_KEY_ID:kid用于JWKS和JWT标头。
谷歌OIDC
EMP_GOOGLE_CLIENT_ID:OAuth客户端ID。EMP_GOOGLE_CLIENT_SECRET:OAuth客户端机密。EMP_GOOGLE_REDIRECT_URI:必须是https://<issuer>/oauth/google/callback.EMP_GOOGLE_AUTH_ENDPOINT:谷歌身份验证端点。EMP_GOOGLE_TOKEN_ENDPOINT:谷歌令牌端点。EMP_GOOGLE_JWKS_URI:谷歌JWKS端点。EMP_GOOGLE_SCOPE:登录的OAuth作用域。
四大
EMP_OAUTH_FIRESTORE_ENABLED:启用Firestore支持的存储。EMP_OAUTH_FIRESTORE_USERS_COLLECTION:用户集合名称。EMP_OAUTH_FIRESTORE_CLIENTS_COLLECTION:客户端集合名称。EMP_OAUTH_FIRESTORE_AUTH_CODES_COLLECTION:身份验证码集合名称。EMP_OAUTH_FIRESTORE_AUTH_REQUESTS_COLLECTION:授权请求集合名称。EMP_OAUTH_FIRESTORE_REFRESH_TOKENS_COLLECTION:刷新令牌集合名称。
部署助手(可选)
EMP_PROJECT_ID:GCP项目id。EMP_REGION:云运行区域。EMP_SERVICE_NAME:云运行服务名称。EMP_REPO_NAME:工件注册表仓库名称。EMP_IMAGE_NAME:Docker镜像名称。EMP_IMAGE_TAG:Docker镜像标签。
🚀 部署步骤(本机)
设置GCP项目
gcloud config set project %PROJECT_ID%
构建本机二进制文件
.\mvnw.cmd package -Dnative -DskipTests -Dquarkus.native.container-build=true
构建Docker镜像
docker build -f src/main/docker/Dockerfile.native -t %REGION%-docker.pkg.dev/%PROJECT_ID%/%REPO_NAME%/%IMAGE_NAME%:%IMAGE_TAG% .
推送Docker镜像
docker push %REGION%-docker.pkg.dev/%PROJECT_ID%/%REPO_NAME%/%IMAGE_NAME%:%IMAGE_TAG%
部署到云端运行
gcloud run deploy %SERVICE_NAME% --image %REGION%-docker.pkg.dev/%PROJECT_ID%/%REPO_NAME%/%IMAGE_NAME%:%IMAGE_TAG% --region %REGION% --platform managed --allow-unauthenticated --env-vars-file env-vars.yaml
🧹 清理端点
呼叫 POST /oauth/cleanup 从计划作业中删除过期的身份验证请求、已使用/过期的身份认证代码和刷新令牌,以及在配置的天数内处于非活动状态的客户端。目前,它没有受到保护;如果需要,可以考虑在生产中保护它。
📎 参考文献
- 项目概况: https://diy.elmolidelanoguera.com/2026/01/un-servidor-de-autenticacion-con-google.html
- OpenAI应用SDK认证: https://developers.openai.com/apps-sdk/build/auth/
- MCP授权规范: https://modelcontextprotocol.io/specification/2025-06-18/basic/authorization
- MCP检验员工具: https://modelcontextprotocol.io/docs/tools/inspector
⚖ 许可证
该项目根据 CC BY-NC-ND 4.0 许可证。看 许可证 文件以获取详细信息。