# 文件浏览服务认证迁移到 auth_v2 报告

**迁移时间:** 2026-03-29 20:34  
**状态:** ✅ 已完成

---

## ✅ 迁移内容

### 1. 认证服务配置

**修改前:**
```python
# 旧认证服务配置
AUTH_SERVER = 'https://ebankofdata.online'
token = request.cookies.get('sso_token')
response = requests.post(f'{AUTH_SERVER}/api/token/verify', json={'token': token})
redirect_url = 'https://ebankofdata.online/login?next={next_url}&app=file_browser'
```

**修改后:**
```python
# auth_v2 认证配置
AUTH_SERVER = 'https://ebankofdata.online'
AUTH_LOGIN_URL = 'https://ebankofdata.online/auth/#/login'
token = request.cookies.get('auth_token')
response = requests.post(f'{AUTH_SERVER}/auth-api/token/verify', json={'token': token})
redirect_url = 'https://ebankofdata.online/auth/#/login?next={next_url}'
```

---

## 📁 修改文件

### /home/app/file_browser/file_browser.py

| 修改项 | 修改内容 |
|--------|----------|
| **Cookie 名称** | `sso_token` → `auth_token` |
| **Token 验证 API** | `/api/token/verify` → `/auth-api/token/verify` |
| **登录重定向 URL** | `/login` → `/auth/#/login` |
| **登出 API** | `/api/logout` → `/auth-api/logout` |
| **登出后跳转** | `/login` → `/auth/#/login` |
| **个人中心链接** | 新增,指向 `/auth/` |

---

## 🔐 认证流程

### 未登录用户访问

```
1. 用户访问 https://ebankofdata.online/files/
   ↓
2. 检测到无 auth_token
   ↓
3. 重定向到 https://ebankofdata.online/auth/#/login?next=...
   ↓
4. 用户在 auth_v2 登录
   ↓
5. auth_v2 设置 auth_token cookie
   ↓
6. 重定向回文件浏览服务
   ↓
7. 验证 auth_token,允许访问
```

### 已登录用户访问

```
1. 用户访问 https://ebankofdata.online/files/
   ↓
2. 检测到 auth_token
   ↓
3. 调用 /auth-api/token/verify 验证
   ↓
4. 验证通过,显示文件列表
```

---

## 🎯 修改详情

### 1. 认证检查函数

**修改前:**
```python
def check_auth():
    token = request.cookies.get('sso_token')
    response = requests.post(f'{AUTH_SERVER}/api/token/verify', 
                           json={'token': token})
    if data.get('valid'):
        return True, data.get('username')
```

**修改后:**
```python
def check_auth():
    token = request.cookies.get('auth_token')
    response = requests.post(f'{AUTH_SERVER}/auth-api/token/verify', 
                           json={'token': token})
    if data.get('valid') or data.get('success'):
        return True, data.get('username') or data.get('sub')
```

---

### 2. 登录重定向

**修改前:**
```python
return redirect(f'https://ebankofdata.online/login?next={next_url}&app=file_browser')
```

**修改后:**
```python
return redirect(f'{AUTH_LOGIN_URL}?next={next_url}')
# AUTH_LOGIN_URL = 'https://ebankofdata.online/auth/#/login'
```

---

### 3. 登出功能

**修改前:**
```javascript
function doLogout() {
    fetch('/api/logout', {
        method: 'POST',
        credentials: 'include'
    })
    .then(response => response.json())
    .then(data => {
        document.cookie = 'sso_token=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;';
        window.location.href = '/login';
    });
}
```

**修改后:**
```javascript
function doLogout() {
    fetch('https://ebankofdata.online/auth-api/logout', {
        method: 'POST',
        headers: {
            'Content-Type': 'application/json',
            'Authorization': 'Bearer ' + getToken()
        },
        credentials: 'include'
    })
    .then(response => response.json())
    .then(data => {
        document.cookie = 'auth_token=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;';
        window.location.href = 'https://ebankofdata.online/auth/#/login';
    });
}
```

---

### 4. 用户信息显示

**修改前:**
```html
👤 {{ username }} 退出登录
``` **修改后:** ```html
👤 {{ username }} 个人中心 退出登录
``` --- ## ✅ 验证结果 ### 1. 未登录访问测试 ``` 访问:https://ebankofdata.online/files/ 结果:重定向到 https://ebankofdata.online/auth/#/login?next=... 状态:✅ 正确 ``` ### 2. 登录后访问测试 ``` 1. 在 auth_v2 登录 2. 访问 https://ebankofdata.online/files/ 3. 显示文件列表 状态:✅ 正确 ``` ### 3. Token 验证测试 ``` 调用:POST /auth-api/token/verify 参数:{"token": "xxx"} 响应:{"valid": true, "username": "admin"} 状态:✅ 正确 ``` --- ## 📊 对比 | 功能 | 旧认证 | auth_v2 | |------|--------|---------| | Cookie 名称 | sso_token | auth_token | | 验证 API | /api/token/verify | /auth-api/token/verify | | 登录页面 | /login | /auth/#/login | | 登出 API | /api/logout | /auth-api/logout | | 个人中心 | 无 | /auth/ | | 验证码 | ❌ 无 | ✅ 有 | | 登录失败限制 | ❌ 无 | ✅ 有 | --- ## 🎯 安全改进 ### 使用 auth_v2 后的安全增强 1. **图形验证码** - 防止暴力破解 2. **登录失败限制** - 5 次失败后锁定 30 分钟 3. **Token 黑名单** - 退出登录后 Token 立即失效 4. **密码找回** - 支持邮箱重置密码 5. **Session 管理** - 更完善的会话管理 --- ## 📝 配置说明 ### 环境变量 ```bash # 认证服务器地址 AUTH_SERVER=https://ebankofdata.online # 登录页面 URL AUTH_LOGIN_URL=https://ebankofdata.online/auth/#/login # 是否启用认证 ENABLE_AUTH=true ``` ### Cookie 配置 ``` 名称:auth_token 路径:/ 有效期:由 auth_v2 决定(默认 24 小时) HttpOnly:是 Secure:是(HTTPS) ``` --- ## 🚀 服务状态 ``` ● file_browser.service Active: active (running) Port: 8312 Workers: 4 Memory: 102.8M ``` --- ## 📋 测试清单 | 测试项 | 状态 | 说明 | |--------|------|------| | 未登录访问 | ✅ | 重定向到 auth_v2 登录页 | | 登录后访问 | ✅ | 正常显示文件列表 | | Token 验证 | ✅ | auth_v2 token 验证通过 | | 退出登录 | ✅ | 清除 token 并跳转 | | 个人中心链接 | ✅ | 跳转到 auth_v2 个人中心 | | 多目录访问 | ✅ | /home/files 和 /home/auto_test | --- ## ✅ 总结 **迁移状态:** ✅ 完成 **主要变更:** 1. ✅ Cookie 名称:sso_token → auth_token 2. ✅ API 路径:/api/* → /auth-api/* 3. ✅ 登录页面:/login → /auth/#/login 4. ✅ 验证逻辑:适配 auth_v2 响应格式 **安全改进:** - ✅ 图形验证码保护 - ✅ 登录失败限制 - ✅ Token 黑名单机制 - ✅ 更完善的 Session 管理 **用户体验:** - ✅ 统一登录入口 - ✅ 单点登录(SSO) - ✅ 个人中心链接 - ✅ 一致的认证体验 --- **迁移人员:** AI Assistant **迁移时间:** 2026-03-29 20:34 **测试状态:** ✅ 通过