---
title: 身份验证
description: DropOut 中的 Microsoft OAuth 和离线身份验证
---

# 身份验证

DropOut 支持两种身份验证方法：Microsoft 账户（用于官方 Minecraft）和离线模式（用于测试和离线游玩）。

## Microsoft 身份验证

### 概述

DropOut 使用 **Device Code Flow** 进行 Microsoft 身份验证，具有以下特点：
- 无需重定向 URL（无需浏览器集成）
- 适用于任何拥有浏览器的设备
- 提供简单的基于代码的身份验证
- 完全符合 Microsoft OAuth 2.0 标准

### 身份验证流程

身份验证链包含多个步骤。DropOut 自动处理这些复杂的交换过程，包括与 Microsoft、Xbox Live 和 Minecraft 服务的交互。如果您对详细的 API 实现感兴趣，请参阅[内部实现](/docs/development/implementation#1-身份验证系统-authentication)。

### 令牌管理

**访问令牌：**
- 短期有效（通常为 1 小时）
- 用于游戏身份验证
- 过期时自动刷新

**刷新令牌：**
- 长期有效（通常为 90 天）
- 安全存储在 `accounts.json` 中
- 用于获取新的访问令牌

**自动刷新：**
令牌过期时，DropOut 会在您启动游戏时尝试使用刷新令牌自动更新您的登录状态，确保您可以无缝开始游玩。

### 安全考虑

- 令牌存储在平台特定的应用数据目录中
- 所有 API 调用仅使用 HTTPS
- 不存储凭据（仅存储令牌）
- 需要 User-Agent 标头（绕过 MS WAF）

### Microsoft 登录故障排除

**"Device code expired"（设备代码已过期）**
- 代码在 15 分钟后过期
- 重新开始登录流程

**"Authorization pending"（授权待处理）**
- 在等待阶段很正常
- 在浏览器中完成授权

**"Invalid token"（无效令牌）**
- 令牌可能已过期
- 登出后重新登录

**"You don't own Minecraft"（您不拥有 Minecraft）**
- 验证您的 Microsoft 账户拥有 Minecraft Java Edition
- 在 https://www.minecraft.net/profile 检查

## 离线身份验证

### 概述

离线模式创建一个不需要互联网连接或 Microsoft 账户的本地账户。这对以下情况很有用：
- 测试和开发
- 无网络游玩
- LAN 多人游戏
- Mod 开发

### 创建离线账户

1. 在登录屏幕单击"离线模式"
2. 输入用户名（3-16 个字符）
3. 单击"创建账户"

### 工作原理

**UUID 生成：**
离线模式使用基于用户名的确定性 UUID 生成算法（UUID v3）。这意味着在同一个启动器实例中，相同的用户名始终会获得相同的 UUID，从而保持单人游戏存档的一致性。

- 确定性：相同的用户名 = 相同的 UUID
- 无需网络请求

**身份验证：**
- 返回 `"null"` 作为访问令牌
- Minecraft 在离线模式下接受空令牌
- 用户名和 UUID 本地存储

### 限制

- 无法加入在线服务器
- 不支持皮肤
- 不支持披风
- 无法使用 Microsoft 账户功能

## 账户管理

### 切换账户

目前 DropOut 一次只支持一个活跃账户。多账户支持正在规划中。

**切换账户的步骤：**
1. 登出当前账户
2. 使用新账户登录

### 账户存储

账户数据存储在应用文件夹的 `accounts.json` 中。该文件包含已登录账户的加密令牌、过期时间和基本的个人资料信息。

### 删除账户

删除账户的步骤：
1. 打开设置
2. 导航到账户
3. 单击"登出"
4. 或手动删除 `accounts.json`

## API 参考

关于身份验证的底层实现、OAuth 2.0 流程细节以及相关的 Tauri 命令接口，请参考开发文档：[实现细节：身份验证](../development/implementation.mdx#1-身份验证系统-authentication)。

## 最佳实践

1. **对官方服务器使用 Microsoft 账户**：为了能够加入官方服务器并使用正版皮肤，请务必使用 Microsoft 账户。
2. **保护令牌安全**：不要向他人分享 `accounts.json` 文件或其内容，因为其中包含您的登录凭据。
3. **定期刷新令牌**：长时间未使用的离线账户或过期的 Microsoft 令牌可以通过重新登录或启动游戏来刷新。
4. **仅在测试时使用离线模式**：离线模式不支持皮肤和部分多人游戏功能。
