05291227
This commit is contained in:
parent
bece0afb3d
commit
6aa7af73f6
|
@ -1,133 +0,0 @@
|
||||||
# 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. 完整认证流程测试
|
|
||||||
1. 在测试页面点击"开始 OIDC 认证流程"
|
|
||||||
2. 将跳转到 OIDC Provider 的内置登录页面
|
|
||||||
3. 使用演示账号登录:`demouser` / `demo123`
|
|
||||||
4. 登录成功后会重定向回客户端应用
|
|
||||||
|
|
||||||
## 🔧 技术细节
|
|
||||||
|
|
||||||
### OIDC Provider 配置
|
|
||||||
```typescript
|
|
||||||
export const oidcApp = createOIDCProvider({
|
|
||||||
config: oidcConfig,
|
|
||||||
useBuiltInAuth: true,
|
|
||||||
builtInAuthConfig: {
|
|
||||||
passwordValidator: validatePassword,
|
|
||||||
sessionTTL: 24 * 60 * 60, // 24小时
|
|
||||||
loginPageTitle: 'OIDC Demo 登录',
|
|
||||||
brandName: 'OIDC Demo Provider',
|
|
||||||
},
|
|
||||||
});
|
|
||||||
```
|
|
||||||
|
|
||||||
### 客户端配置
|
|
||||||
```typescript
|
|
||||||
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配置
|
|
||||||
};
|
|
||||||
```
|
|
||||||
|
|
||||||
## 📋 验证清单
|
|
||||||
|
|
||||||
- [x] 删除客户端登录页面
|
|
||||||
- [x] 修复回调页面引用
|
|
||||||
- [x] OIDC Provider 内置认证正常工作
|
|
||||||
- [x] 标准 OIDC 流程可以完整运行
|
|
||||||
- [x] Discovery 端点返回正确配置
|
|
||||||
- [x] 文档已更新
|
|
||||||
- [x] 测试页面可用
|
|
||||||
|
|
||||||
## 🚀 启动说明
|
|
||||||
|
|
||||||
1. 启动后端 OIDC Provider:
|
|
||||||
```bash
|
|
||||||
cd apps/backend
|
|
||||||
bun run dev
|
|
||||||
```
|
|
||||||
|
|
||||||
2. 启动前端客户端:
|
|
||||||
```bash
|
|
||||||
cd apps/web
|
|
||||||
npm run dev
|
|
||||||
```
|
|
||||||
|
|
||||||
3. 访问测试页面:
|
|
||||||
http://localhost:3001/test-oidc
|
|
||||||
|
|
||||||
## 🎉 总结
|
|
||||||
|
|
||||||
现在项目已经完全符合标准的 OIDC 架构:
|
|
||||||
- **分离关注点**: OIDC Provider 专注于认证,客户端专注于业务逻辑
|
|
||||||
- **标准合规**: 完全符合 OpenID Connect 规范
|
|
||||||
- **简化维护**: 认证逻辑集中在 Provider 中
|
|
||||||
- **更好的安全性**: 用户凭据只在 Provider 中处理
|
|
Loading…
Reference in New Issue