CF MCP客户端与CF-SSO集成
一个Spring Boot应用程序,它提供了一个具有模型上下文协议(MCP)服务器集成的人工智能聊天客户端,具有Cloud Foundry单点登录(CF-SSO)身份验证功能。
🚀 特性
- 🔐 CF-SSO身份验证:与Cloud Foundry单点登录无缝集成
- 🤖 AI聊天界面:由Spring AI提供支持,支持多个LLM提供商
- 🔌 MCP服务器集成:模型上下文协议服务器连接
- 💾 内存管理:具有矢量存储的持久对话历史
- 📄 文档处理:PDF文档分析和处理
- 🌐 多语言支持:英语和希伯来语支持
- 📱 响应式用户界面:现代、移动友好的界面
🏗️ 建筑
身份验证流程
User → Landing Page → CF-SSO Login → Welcome Page → Chat Interface技术栈
- 后端:Spring Boot 3.5.3、Spring Security、Spring AI
- 前端:Angular、HTML5、CSS3、JavaScript
- 认证:通过java cfenv使用CF-SSO的OAuth2/OIDC
- 数据库:带有pgvector的PostgreSQL用于嵌入
- 部署:使用java构建包的Cloud Foundry
📋 先决条件
- Java 21+
- Maven 3.6+
- Node.js 18+(用于前端构建)
- PostgreSQL数据库
- Cloud Foundry命令行界面
- CF-SSO服务实例
🛠️ 地方发展设置
1.克隆存储库
git clone https://github.com/0pens0/cf-mcp-client.git
cd cf-mcp-client
git checkout feature/landing-page-sso2.数据库设置
创建PostgreSQL数据库:
CREATE DATABASE mydb;
CREATE USER myuser WITH PASSWORD 'mypassword';
GRANT ALL PRIVILEGES ON DATABASE mydb TO myuser;3.环境配置
创建 application-local.yaml:
spring:
datasource:
url: jdbc:postgresql://localhost:5432/mydb
username: myuser
password: mypassword
driver-class-name: org.postgresql.Driver
jpa:
hibernate:
ddl-auto: update
# Optional: GitHub OAuth2 for local development
spring:
security:
oauth2:
client:
registration:
github:
client-id: ${GITHUB_CLIENT_ID}
client-secret: ${GITHUB_CLIENT_SECRET}
scope: read:user, user:email
provider:
github:
authorization-uri: https://github.com/login/oauth/authorize
token-uri: https://github.com/login/oauth/access_token
user-info-uri: https://api.github.com/user
user-name-attribute: id4.构建和运行
# Build the application
mvn clean package -DskipTests
# Run locally
java -jar target/cf-mcp-client-1.5.1.jar --spring.profiles.active=local☁️ Cloud Foundry部署
1.先决条件
- 您的Cloud Foundry空间中提供了CF-SSO服务实例
- PostgreSQL服务实例(可选,可以使用外部数据库)
2.服务绑定
# Create CF-SSO service instance
cf create-service p-identity cf-sso-service
# Optional: Create PostgreSQL service
cf create-service postgresql-db shared postgres-service3.部署应用程序
# Deploy to Cloud Foundry
cf push cf-mcp-client-sso -f manifest.yml4.绑定服务
# Bind CF-SSO service
cf bind-service cf-mcp-client-sso cf-sso-service
# Optional: Bind PostgreSQL service
cf bind-service cf-mcp-client-sso postgres-service
# Restart application to pick up service bindings
cf restart cf-mcp-client-sso🔧 配置
自动CF-SSO配置
应用程序使用 java-cfenv-boot-pivotal-sso 对于自动OAuth2配置:
io.pivotal.cfenv
java-cfenv-boot-pivotal-sso
3.5.0
这将自动配置:
- OAuth2客户端注册ID
sso - 授权、令牌和用户信息URI
- 服务绑定中的客户端ID和密钥
- 正确的作用域和重定向URI
手动配置(如果需要)
如果自动配置不起作用,您可以在中手动配置OAuth2 application.yaml:
spring:
security:
oauth2:
client:
registration:
cf-sso:
client-id: ${CF_SSO_CLIENT_ID}
client-secret: ${CF_SSO_CLIENT_SECRET}
scope: openid, profile
authorization-grant-type: authorization_code
redirect-uri: "{baseUrl}/login/oauth2/code/{registrationId}"
provider:
cf-sso:
authorization-uri: ${CF_SSO_AUTH_URI}
token-uri: ${CF_SSO_TOKEN_URI}
user-info-uri: ${CF_SSO_USER_INFO_URI}
user-name-attribute: user_name
jwk-set-uri: ${CF_SSO_JWK_SET_URI}🌐 应用程序端点
公共端点
/-登录页面/login.html-登录页面/login-OAuth 2登录重定向/auth/provider-获取活动身份验证提供程序/auth/status-获取身份验证状态
受保护的端点
/welcome-登录后欢迎页面/chat-聊天界面(如果已实现)/document/**-文档处理端点
OAuth2端点
/oauth2/authorization/sso-CF-SSO授权/oauth2/authorization/github-GitHub授权(回退)/login/oauth2/code/sso-CF-SSO回拨/login/oauth2/code/github-GitHub回调
🔍 故障排除
常见问题
1.“Id为cf sso的客户端注册无效”
问题:登录按钮使用了错误的注册ID\ 解决方案:更新登录按钮以使用 /oauth2/authorization/sso 而不是 /oauth2/authorization/cf-sso
2.“Jwk集格式错误-缺少必需的'keys'成员”
问题:CF-SSO JWK集URI返回无效数据\ 解决方案:使用javacfenv自动配置而不是手动配置
3.“模糊映射”错误
问题:多个控制器处理同一端点\ 解决方案:删除冲突的映射或使用不同的端点路径
4.启动时应用程序崩溃
问题:Bean冲突或缺少依赖项\ 解决方案:检查日志中的特定错误消息并解决冲突
调试
启用调试日志记录:
logging:
level:
org.springframework.security: DEBUG
org.springframework.security.oauth2: DEBUG
io.pivotal.cfenv: DEBUG📚 关键组件
控制器
LoginController:处理OAuth2登录重定向和提供程序选择WelcomeController:显示包含用户信息的登录后欢迎页面AuthController:提供身份验证状态和提供程序信息WebController:提供静态页面并处理根重定向
安全配置
SecurityConfig:使用OAuth2登录配置Spring Security- 自动配置:使用java cfenv进行CF-SSO集成
- 动态提供商选择:支持CF-SSO和GitHub OAuth2
前端
login.html:具有动态提供商选择的登录页面welcome.html:Thymeleaf欢迎页面模板- 角度组件:聊天界面和文档处理
🤝 贡献
- 分叉存储库
- 创建要素分支:
git checkout -b feature/new-feature - 提交更改:
git commit -am 'Add new feature' - 推送到分支:
git push origin feature/new-feature - 创建拉取请求
📄 许可证
此项目根据MIT许可证获得许可-请参阅 许可证 文件以获取详细信息。
🙏 致谢
- Spring Boot和Spring Security团队提供卓越的OAuth2支持
- CF-SSO服务的Cloud Foundry团队
- 用于自动服务绑定配置的javacfenv项目
- Spring AI团队具备AI集成能力
📞 支持
对于问题和疑问:
- 在GitHub存储库中创建问题
- 检查上面的故障排除部分
- 审查Cloud Foundry和CF-SSO文档
______________________________________________________________________
内置于❤️ Cloud Foundry和Spring社区
