- 版权类型
- 原创
- 插件中文名称
- 服务器认证平台插件
- 插件英文名称
- ServerAuthPlatform
- 原帖地址
- #
- 支持的核心(服务端)
- Paper
- 语言支持
- 多语言
- 适配版本(Java)
- 26.x
- 1.21
【插件发布】ServerAuthPlatform v0.1.0
离线Minecraft 服务端可用 · 账号认证插件 · Phase 1 MVP 已可上线
一、它解决什么问题
离线(盗版)服务器没有正版验证,玩家的「名字」一文不值:
ServerAuthPlatform 在玩家进服后立刻施加限制,直到完成认证:
二、功能特性一览
三、快速上手
▍新玩家第一次进服
▍老玩家进服
▍断线重连
已登录玩家掉线后 300 秒(可配置)内重连,自动恢复登录状态,无需再次输入密码。
▍输入过程中想放弃
在聊天栏输入 cancel 即可取消当前的密码输入。
四、命令与权限
别名:/login → /l,/register → /reg
五、配置说明
配置文件位于 plugins/ServerAuthPlatform/config.yml,首次启动自动生成:
▍关于 bcrypt-cost
哈希在异步线程池执行,不会卡主线程;但数值过高仍会让玩家感觉「点了登录后半天没反应」。
▍消息配置
六、安全设计
七、技术亮点(面向开发者)
八、已知限制(Phase 1 刻意接受)
九、后续开发规划(路线图)
十、安装与构建
▍环境要求
▍构建
产物:build/libs/MCServerAuthPlatform-0.1.0.jar(fat jar,已内嵌 BCrypt,单文件直接使用)
▍安装
▍备份
数据库文件为 plugins/ServerAuthPlatform/data.db,备份 = 复制该文件(建议服务器关闭状态下复制)。
十一、常见问题
十二、联系与反馈
ServerAuthPlatform v0.1.0 · Phase 1 MVP · 独立可上线 · 独立可验证 · 独立可放弃
离线Minecraft 服务端可用 · 账号认证插件 · Phase 1 MVP 已可上线
| 类型 | 服务端插件(Bukkit / Spigot / Paper) |
| 当前版本 | 0.1.0(Phase 1 / MVP) |
| 目标 API | Bukkit API 1.21+ |
| 实测环境 | Paper 1.21.4 / Spigot 1.21.4 |
| 运行环境 | Java 21(编译与运行目标均为 21) |
| 数据存储 | SQLite 单文件(自动迁移) |
| 密码算法 | BCrypt(默认 cost=12,异步线程池执行) |
| 质量保障 | 9 个测试类 / 67 个单元测试全部通过 |
一、它解决什么问题
离线(盗版)服务器没有正版验证,玩家的「名字」一文不值:
- 别人可以冒用你的名字进服,拿走你的装备、领地、权限;
- 没有可靠的「这个人就是账号主人」的判断依据;
- 管理员的 OP 也可能被冒名顶替。
ServerAuthPlatform 在玩家进服后立刻施加限制,直到完成认证:
| 未登录时 | 行为 |
| 移动 | 冻结(允许转动视角) |
| 聊天 | 拦截 |
| 交互 / 破坏 / 放置方块 | 拦截 |
| 背包操作 / 丢弃物品 / 切换快捷栏 | 拦截 |
| 受到伤害 / 攻击他人 | 拦截(未登录免疫伤害) |
| 执行命令 | 仅允许白名单内的认证命令 |
二、功能特性一览
两段式注册 / 登录:执行 /register 或 /login 后,在聊天栏输入密码即可,密码不进入命令日志;
断线重连免登录:已登录玩家掉线后 300 秒(可配置)内重连自动恢复登录状态,可选 IP 严格校验;
图形认证面板:27 格 GUI,进服自动弹出,含登录 / 注册 / 关闭按钮与玩家头颅状态显示;
全套未登录限制:移动、聊天、交互、背包、伤害、命令六类限制,每一项都可独立开关;
命令白名单机制:基于 PlayerCommandPreprocessEvent 全量拦截,杜绝「漏注册命令 = 绕过点」;
BCrypt 密码哈希:密码绝不明文入库,哈希在异步线程池执行,不卡主线程;
SQLite 单文件存储:复制 data.db 即完成备份,启动自动执行幂等数据库迁移;
全量消息可配置:所有玩家可见文案集中在 messages.yml,支持 & 颜色代码与 {player} 等占位符,热重载即时生效;
配置语义校验:启动时配置有致命问题会拒绝启用并列出全部问题;热重载失败保留旧配置,不弄坏运行中的服务器;
对外 API:内置 AuthPluginAPI,其他插件可查询认证状态、用户信息、强制登出;
OP 不绕过认证:防止管理权限被冒用,忘记密码用服务器控制台处理(刻意设计,无 bypass 开关);
质量保障:67 个单元测试全通过,时间源可注入,测试不依赖运行中的服务器。
三、快速上手
▍新玩家第一次进服
- 进服自动弹出「账号认证」面板,聊天栏提示使用 /register 注册;
- 输入 /register(推荐不带参数);
- 在聊天栏输入要设置的密码(这条消息不会进入聊天,也不会进入命令日志);
- 再输入一次确认;
- 注册成功 → 自动登录 → 限制解除。
▍老玩家进服
- 输入 /login(推荐不带参数);
- 在聊天栏输入密码;
- 登录成功 → 限制解除。
▍断线重连
已登录玩家掉线后 300 秒(可配置)内重连,自动恢复登录状态,无需再次输入密码。
▍输入过程中想放弃
在聊天栏输入 cancel 即可取消当前的密码输入。
四、命令与权限
| 命令 | 权限 | 默认持有者 | 说明 |
| /login | 无 | 所有人 | 进入密码输入会话,聊天栏输入密码(推荐) |
| /login <密码> | 无 | 所有人 | 快捷登录,⚠ 密码会进入服务端日志,不推荐 |
| /register | 无 | 所有人 | 两段式注册,聊天栏输入两次密码(推荐) |
| /register <密码> <确认> | 无 | 所有人 | 快捷注册,⚠ 同上,不推荐 |
| /logout | 无 | 所有人 | 立即登出,回到受限状态 |
| /auth | 无 | 所有人 | 打开 / 重新打开认证面板 |
| /authadmin reload | serverauthplatform.admin | OP | 热重载 config.yml 与 messages.yml |
| /authadmin unregister <玩家> | serverauthplatform.admin | OP | 删除该玩家账号(需重新注册) |
| /authadmin force <玩家> | serverauthplatform.admin | OP | 强制把在线玩家置为已登录 |
别名:/login → /l,/register → /reg
五、配置说明
配置文件位于 plugins/ServerAuthPlatform/config.yml,首次启动自动生成:
代码:
# 认证设置
auth:
min-password-length: 6 # 密码最小长度
max-password-length: 32 # 密码最大长度(硬上限 64)
bcrypt-cost: 12 # BCrypt 强度 4-31,推荐 10-14
# 会话设置
session:
grace-period: 300 # 断线重连宽限期(秒),0 = 禁用免登录
ip-strict: false # 宽限期内是否要求来源 IP 一致
input-timeout: 30 # 密码输入会话超时(秒)
# 未登录限制(均可独立开关)
restriction:
freeze-movement: true # 冻结移动(允许转视角)
freeze-chat: true # 禁止聊天
freeze-interaction: true # 禁止交互、破坏/放置方块
freeze-inventory: true # 禁止背包操作、丢弃物品、切换快捷栏
freeze-damage: true # 免疫伤害 & 禁止攻击
allowed-commands: # 未登录时允许的命令(小写、不带斜杠)
- login
- l
- register
- reg
- auth
- logout
# 图形面板
gui:
enabled: true # 是否启用图形面板
auto-open: true # 进服自动打开面板
# 数据库(Phase 1 仅 SQLite)
database:
file: "data.db" # 相对插件数据目录的数据库文件名
settings:
debug: false # 调试日志(排查问题时临时开启)
▍关于 bcrypt-cost
| cost | 单次哈希耗时(参考) | 建议 |
| 10 | 约 60-90 ms | 低配机器 |
| 12 | 约 250-400 ms | 默认,推荐 |
| 14 | 约 1 秒 | 服务器性能充足且在意安全性 |
| ≥ 17 | 超过 10 秒 | 会被配置校验拒绝 |
哈希在异步线程池执行,不会卡主线程;但数值过高仍会让玩家感觉「点了登录后半天没反应」。
▍消息配置
- 所有玩家可见文案集中在 messages.yml,颜色代码用 &(如 &a = 绿色);
- 占位符:{player}、{min}、{max}、{prefix};
- 修改后执行 /authadmin reload 即时生效;
- 若某条消息键被删除,玩家会看到 <missing:键名> —— 刻意设计,方便定位配置问题。
六、安全设计
- 密码不会明文入库:数据库只保存 BCrypt 哈希(含随机盐),哈希不可逆;
- 默认输入路径避开命令日志:/register、/login 后在聊天栏输入密码,本插件在 LOWEST 优先级取消聊天事件,大多数插件拿不到内容;
- OP 不绕过认证:管理权限同样需要先完成登录,冒名者无法利用 OP 账号;
- 敏感操作受权限保护:/authadmin 全部子命令由 serverauthplatform.admin 权限节点控制;
- 配置校验兜底:启动校验失败拒绝启用,reload 失败保留旧配置,不会把运行中的服务器改坏。
七、技术亮点(面向开发者)
- 三执行域线程模型:主线程只碰 Bukkit API,2 线程认证池负责 BCrypt 与数据库,异步维护任务清理过期会话;回调必切主线程,插件卸载时等待 5 秒,杜绝「卸载后还在回调」的经典崩溃;
- SQLite 单连接 + 串行化:SQLite 写入本身串行,多连接只会带来 SQLITE_BUSY;认证场景 QPS 极低,连接池是过度设计;
- 取消事件而非接管玩家状态:不改速度、不上失明、不开无敌,最小侵入、最容易排查;移动事件只比对坐标,允许转动视角;
- 命令白名单全覆盖:用 PlayerCommandPreprocessEvent 拦截,是唯一能覆盖「所有命令」的位置,支持 /sap:login 这类带命名空间的写法;
- GUI 身份判定基于 InventoryHolder:不用标题字符串识别面板——标题是玩家可见文本,会随语言/颜色变化,用它做判定是典型事故来源;
- 身份模型钉死:离线服务器上 UUID 就是身份,登录一律按 UUID 查询;用户名仅是显示名,改名 = 换身份(不自动迁移,V1 提供迁移命令);
- 时间源可注入:测试通过 LongSupplier 快进时钟,不使用 Thread.sleep,测试确定性高;
- 分层纪律:auth / session / database 包零 Bukkit 依赖,玩家可见文案只存在于 messages.yml;代码零 io.papermc.paper.* 引用,以 Spigot API 编译证明跨端兼容。
八、已知限制(Phase 1 刻意接受)
| 限制 | 说明 | 计划 |
| 会话不持久化 | 插件/服务器重启后所有登录状态丢失,需重新登录 | V1:auth_sessions 表 |
| 仅支持 SQLite | 无法多服共享账号 | V1:MySQL |
| 无改密码命令 | 只能 /authadmin unregister 后重新注册 | V1 |
| 密码输入非绝对机密 | 聊天栏输入仍可能被低优先级插件截获 | V2:Remote 认证 |
| OP 不绕过认证 | 忘记密码需控制台处理 | 刻意设计 |
九、后续开发规划(路线图)
| 阶段 | 内容 | 状态 |
| Phase 1 / MVP(0.1.0) | Local 认证 + SQLite + 内存会话 + 未登录限制 + 基础 GUI + 命令权限 + 67 个单元测试 | |
| Phase 2 / V1 | MySQL 支持、auth_sessions 跨重启会话、公开 API 扩展 + 自定义事件、UUID 迁移(离线→正版)、/authadmin migrate、PlaceholderAPI、TOTP 二次验证、改密码命令、登录审计表 | 未开始 |
| Phase 3 / V2 | Remote 认证:外部登录系统 + HTTPS + 一次性 Token + 批量轮询队列,API Key 不落日志 | 未开始 |
| Phase 4 / V3 | BOTH 模式(本地+远程混合)、多服共享数据库、Web 管理面板、Vault / LuckPerms 生态集成、自定义 GUI 主题 | 未开始 |
十、安装与构建
▍环境要求
| 项 | 要求 |
| 服务端 | Spigot 1.21.4 / Paper 1.21.4(1.21 系列理论上均可) |
| Java | Java 21 |
| 构建工具 | 项目自带 Gradle Wrapper,无需本机安装 Gradle |
▍构建
代码:
# Windows
gradlew.bat build
# macOS / Linux
./gradlew build
产物:build/libs/MCServerAuthPlatform-0.1.0.jar(fat jar,已内嵌 BCrypt,单文件直接使用)
▍安装
- 关闭服务器;
- 把 jar 放进服务端 plugins/ 目录;
- 启动服务器(首次启动自动生成 config.yml、messages.yml 与 data.db);
- 按需修改配置后执行 /authadmin reload 或重启服务器。
▍备份
数据库文件为 plugins/ServerAuthPlatform/data.db,备份 = 复制该文件(建议服务器关闭状态下复制)。
十一、常见问题
十二、联系与反馈
- Author: Stephen Zhang
- Website: www.ywzltech.com
- 如果你正在使用本插件,欢迎反馈使用场景与问题 —— 这将直接决定 V1 / V2 的优先级!
ServerAuthPlatform v0.1.0 · Phase 1 MVP · 独立可上线 · 独立可验证 · 独立可放弃