3.2 KiB
3.2 KiB
OIDC 架构更新总结
🎯 更新目标
将项目从混合认证架构改为标准的 OIDC 架构,确保所有用户认证都在 OIDC Provider 中处理。
🔄 主要改动
1. 删除客户端登录页面
- ❌ 删除了
apps/web/app/auth/login/page.tsx
- ❌ 删除了客户端应用中的自定义认证逻辑
2. 修复回调页面
- ✅ 更新
apps/web/app/auth/callback/page.tsx
中的错误链接 - ✅ 移除对已删除登录页面的引用
3. 添加测试页面
- ✅ 创建
apps/web/app/test-oidc/page.tsx
用于测试OIDC流程 - ✅ 在首页添加测试页面链接
4. 更新文档
- ✅ 更新
apps/backend/README.md
以反映正确的架构
🏗️ 当前架构
正确的 OIDC 流程
用户点击登录
↓
客户端重定向到 OIDC Provider 授权端点
↓
OIDC Provider 显示内置登录页面
↓
用户在 Provider 页面上登录
↓
Provider 生成授权码并重定向回客户端
↓
客户端用授权码换取令牌
↓
认证完成
架构优势
✅ 已实现的正确做法
- OIDC Provider 包含登录页面
- 标准授权码流程
- PKCE 支持
- 内置会话管理
- 自动令牌刷新
❌ 已移除的错误做法
- 客户端应用的登录页面
- 自定义认证逻辑
- 重复的用户管理
- 混合认证流程
🧪 测试方法
1. 访问测试页面
访问 http://localhost:3001/test-oidc
进行完整的流程测试
2. 测试 Discovery 端点
在测试页面点击"测试 Discovery 端点"按钮
3. 完整认证流程测试
- 在测试页面点击"开始 OIDC 认证流程"
- 将跳转到 OIDC Provider 的内置登录页面
- 使用演示账号登录:
demouser
/demo123
- 登录成功后会重定向回客户端应用
🔧 技术细节
OIDC Provider 配置
export const oidcApp = createOIDCProvider({
config: oidcConfig,
useBuiltInAuth: true,
builtInAuthConfig: {
passwordValidator: validatePassword,
sessionTTL: 24 * 60 * 60, // 24小时
loginPageTitle: 'OIDC Demo 登录',
brandName: 'OIDC Demo Provider',
},
});
客户端配置
export const oidcConfig = {
authority: 'http://localhost:3000/oidc',
client_id: 'demo-client',
redirect_uri: 'http://localhost:3001/auth/callback',
response_type: 'code',
scope: 'openid profile email',
// ... 其他标准OIDC配置
};
📋 验证清单
- 删除客户端登录页面
- 修复回调页面引用
- OIDC Provider 内置认证正常工作
- 标准 OIDC 流程可以完整运行
- Discovery 端点返回正确配置
- 文档已更新
- 测试页面可用
🚀 启动说明
-
启动后端 OIDC Provider:
cd apps/backend bun run dev
-
启动前端客户端:
cd apps/web npm run dev
-
访问测试页面: http://localhost:3001/test-oidc
🎉 总结
现在项目已经完全符合标准的 OIDC 架构:
- 分离关注点: OIDC Provider 专注于认证,客户端专注于业务逻辑
- 标准合规: 完全符合 OpenID Connect 规范
- 简化维护: 认证逻辑集中在 Provider 中
- 更好的安全性: 用户凭据只在 Provider 中处理