# 文件浏览服务认证迁移到 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
<div>
    <span>👤 {{ username }}</span>
    <a href="#" onclick="doLogout(); return false;" class="btn-logout">退出登录</a>
</div>
```

**修改后：**
```html
<div class="user-info">
    <span>👤 {{ username }}</span>
    <a href="https://ebankofdata.online/auth/" class="btn-logout" target="_blank">个人中心</a>
    <a href="#" onclick="doLogout(); return false;" class="btn-logout">退出登录</a>
</div>
```

---

## ✅ 验证结果

### 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  
**测试状态：** ✅ 通过
