FastGPT 单点登录(SSO)Java 实现,提供完整的 OAuth 2.0 和 SAML 2.0 认证服务。
本项目是 FastGPT 的 SSO 服务 Java 版本实现,支持多种认证协议和提供者,为 FastGPT 系统提供统一的身份认证和授权服务。
- Java 8
- Spring Boot 2.7.18
- Spring Security
- Maven
- JWT (JSON Web Token)
- SAML 2.0
- OAuth 2.0
- OAuth 2.0 认证流程
- SAML 2.0 认证支持
- JWT Token 生成和验证
- 多种 SSO 提供者支持
- 获取认证 URL
- 处理认证回调
- 获取用户信息
- 用户列表管理
- 组织列表管理
- SAML 元数据服务
- 请求认证中间件
- CORS 跨域支持
- 安全配置管理
src/
├── main/
│ ├── java/org/example/
│ │ ├── FastGptSsoApplication.java # 主应用程序入口
│ │ ├── config/ # 配置类
│ │ │ ├── SecurityConfig.java # 安全配置
│ │ │ └── FilterConfig.java # 过滤器配置
│ │ ├── controller/ # 控制器层
│ │ │ └── SsoController.java # SSO 主控制器
│ │ ├── dto/ # 数据传输对象
│ │ │ ├── ApiResponse.java # 通用 API 响应
│ │ │ ├── UserInfo.java # 用户信息
│ │ │ ├── UserListItem.java # 用户列表项
│ │ │ └── OrgListItem.java # 组织列表项
│ │ ├── service/ # 服务层
│ │ │ ├── SsoProviderService.java # SSO 服务接口
│ │ │ ├── GlobalStoreService.java # 全局存储服务
│ │ │ └── impl/ # 服务实现
│ │ │ └── TestSsoProviderServiceImpl.java
│ │ ├── middleware/ # 中间件
│ │ │ └── AuthMiddleware.java # 认证中间件
│ │ └── util/ # 工具类
│ └── resources/
│ └── application.properties # 应用配置
└── test/ # 测试代码
- Java 8 或更高版本
- Maven 3.6 或更高版本
-
克隆项目
git clone <repository-url> cd fastgpt-sso-java
-
配置环境变量
cp .env.example .env
编辑
.env文件,配置必要的环境变量:# 服务器配置 SERVER_PORT=8080 SERVER_HOST=localhost # 应用配置 SPRING_APPLICATION_NAME=fastgpt-sso-java APP_SSO_PROVIDER=test APP_AUTH_TOKEN=your-auth-token APP_REDIRECT_ENABLED=false # 测试配置 TEST_REDIRECT_URI=http://localhost:3000/callback TEST_STATE=test-state-123 TEST_CODE=test-code-456 TEST_BASE_URL=http://localhost:8080
-
构建项目
mvn clean compile
-
运行应用
mvn spring-boot:run
或者构建 JAR 包后运行:
mvn clean package java -jar target/fastgpt-sso-java-1.0-SNAPSHOT.jar
-
验证服务
访问 http://localhost:8080/test,应该返回 "FastGPT-SSO-Service"
GET /login/oauth/getAuthURL
参数:
redirect_uri(必需): 回调地址state(可选): 状态参数
GET /login/oauth/callback
GET /login/oauth/getUserInfo
参数:
code(必需): 授权码
GET /user/list
需要认证 Token
GET /org/list
需要认证 Token
GET /login/saml/metadata.xml
POST /login/saml/assert
参数:
SAMLResponse(必需): SAML 响应RelayState(可选): 中继状态
GET /test
# 服务器端口
server.port=8080
# 应用名称
spring.application.name=fastgpt-sso-java
# SSO 提供者
app.sso.provider=test
# 认证 Token
app.auth.token=xxx
# 重定向功能
app.redirect.enabled=false
# 主机名
app.hostname=支持通过环境变量覆盖配置文件中的设置:
SERVER_PORT: 服务端口APP_SSO_PROVIDER: SSO 提供者APP_AUTH_TOKEN: 认证令牌APP_REDIRECT_ENABLED: 是否启用重定向SAML_*: SAML 相关配置OAUTH_*: OAuth 相关配置
- 实现
SsoProviderService接口 - 在
config包中添加相应的配置类 - 更新
application.properties中的提供者配置
- 修改
AuthMiddleware类 - 更新
SecurityConfig配置 - 添加必要的过滤器规则
- 在
SsoController中添加新的端点 - 创建相应的 DTO 类
- 实现业务逻辑
mvn clean package -DskipTests项目包含 TypeScript 版本的 Docker 配置,可参考 fastgpt-sso-template 目录。
- 设置正确的数据库连接
- 配置 HTTPS 证书
- 设置生产环境的认证密钥
- 启用日志记录
- 配置监控和健康检查
-
端口冲突
- 修改
server.port配置 - 检查端口占用情况
- 修改
-
认证失败
- 检查
app.auth.token配置 - 验证请求头中的 Token
- 检查
-
CORS 错误
- 检查
SecurityConfig中的 CORS 配置 - 确认前端域名在允许列表中
- 检查
在 application.properties 中添加日志配置:
logging.level.org.example=DEBUG
logging.level.org.springframework.security=DEBUG- Fork 项目
- 创建功能分支
- 提交更改
- 推送到分支
- 创建 Pull Request
本项目采用 MIT 许可证,详情请参阅 LICENSE 文件。
如有问题或建议,请通过以下方式联系:
- 提交 Issue
- 发送邮件
- 参与讨论
- 初始版本发布
- 支持 OAuth 2.0 和 SAML 2.0
- 基础用户和组织管理功能
- 完整的 API 接口