验证返回

验证返回

即使身份验证服务器宕机也能正常游玩

管理

允许你在 Mojang 认证服务器宕机时仍能正常游玩。 此外还改进了网络行为。

工作原理是什么?

  1. 来自 Mojang webservices/API 的响应会在本地缓存一段时间。
    如果发生服务中断,将使用之前缓存的响应。
    例如,这可以让你的皮肤正常显示。
  2. 每个客户端都会在本地存储(如果不存在则生成)一对密钥,当 Mojang 认证服务器宕机时,它将被用作与服务器进行认证的回退方案(参见公钥加密)。
    请注意:
    • 服务器也需要安装此模组
    • 你之前必须已经加入过该服务器(在过去 36 天内)

此模组对客户端和服务器来说都是可选的。
但是,如果有一方缺少此模组,当 Mojang 认证服务器/API 宕机时,将无法加入服务器。

使用

命令

在安装了此模组的服务器上,你可以使用 /authback 命令来管理你自己的公钥,如果你是管理员,还可以管理其他玩家的公钥。

配置

客户端

你可以通过以下方式配置此模组:

  • Options > Online... > AuthBack...
  • 或者如果安装了 ModMenu:Mods > AuthBack > Click Icon/Settings

通用

配置会按以下顺序动态加载(按优先级从高到低排列)
  • 环境变量
    • 以 AUTHBACK_<variant> 为前缀
      • 其中 variant 为 SERVER 或 CLIENT
    • 以 AUTHBACK_ 为前缀
    • 所有属性均为大写,并使用 _ 代替 . 或 -
  • 系统属性
    • 以 authback.<variant> 为前缀
      • 其中 variant 为 server 或 client
    • 以 authback. 为前缀
  • 位于 .config/authback-<variant>.json 的配置文件
    • 其中 variant 为 server 或 client
配置选项完整列表

请注意,预配置的值通常开箱即用。
进行修改时,你应当确切地知道自己在做什么。

通用(客户端和服务器)
属性 类型 默认值 备注
global-public-keys-cache.default-reuse-minutes int 120(2 小时) Mojang API 全局公钥的响应几乎从不改变。在撰写本文档时,它在过去 2 年多里一直保持不变。此选项指示模组在指定的分钟数内复用上次保存的响应,而不是再次联系 API。使用缓存响应速度更快,并且在频繁重启游戏时节省网络流量。
game-profiles.delete-after-days int 36 选择 36 天作为默认值,是因为当玩家更改用户名时,该名称将在 37 天内不可用
game-profiles.max-cache-size int 250 缓存中保留的游戏档案最大数量。如果超出最大值,将删除最旧的条目,直到列表降至配置最大值的 90%。
username-to-id-resolver.use-vanilla bool false 使用原始/“原版”的用户名到 ID 解析器
username-to-id-resolver.expire-after-days int 36 缓存条目将在这么多天后被删除。
选择 36 天作为默认值,是因为当玩家更改用户名时,该名称将在 37 天内不可用。
原版实现使用 1 个月。
username-to-id-resolver.refresh-before-expire-days int 14 在过期前多少天,缓存条目在被访问时会被刷新。
username-to-id-resolver.max-cache-size int 1000 缓存中保留的用户名和 ID 的最大数量。如果超出最大值,将删除最旧的条目,直到列表降至配置最大值的 90%。
username-to-id-resolver.resolve-offline-users-by-default bool true 离线用户(例如未验证的账户)是否应被缓存?
请注意
  • 离线用户缓存与在线用户缓存完全分离,且永远不会被持久化。
  • 这只是初始值
  • 客户端始终会解析离线用户,而服务器仅在 online-mode 被禁用时才会这样做
username-to-id-resolver.update-on-game-profile-fetch bool true 当获取游戏档案时:是否应将信息转发给用户名到 ID 解析器/缓存?
缓存仅在需要时更新(例如未知的用户名/ID 或不存在的条目)
username-to-id-resolver.use-game-profile-cache bool true 当所有主缓存失败时,将 GameProfileCacheManager 用作二级缓存。
这种情况应该极为罕见,但如果缓存例如已损坏,则可能发生
skip-extract-profile-action-types bool false 调试选项
服务器
属性 类型 默认值 备注
keys.max-keys-per-player int 3 每个玩家最多存储的公钥数量
keys.delete-after-unused-days int 36 如果用户在此时间内未使用公钥登录,该密钥将被删除。选择 36 天作为默认值,是因为当玩家更改用户名时,该名称将在 37 天内不可用
fallback-auth.allow-always bool true 始终允许使用回退认证。如果你只希望在玩家登录期间服务器无法与 Mojang API 通信时才允许回退认证,请设置为 false
fallback-auth.rate-limit.requests-per-ip-per-minute int 20 默认值允许每 3 秒一次请求。如果该值设置为 0 或更小,则速率限制器将被禁用
fallback-auth.rate-limit.bucket-size int 1000 要存储(在内存中)的 IP 地址数量
fallback-auth.rate-limit.ignore-private-addresses bool true 是否不应限制私有 IP 地址的速率?
fallback-auth.rate-limit.ipv6-network-prefix-bytes int 8 IPv6 的网络前缀字节数(不是位数!)。默认值 8 解析为 /64。
force-disable-enforce-secure-profile bool true 强制禁用 enforce-secure-profile
skip-old-user-conversion bool true 跳过 1.7.6(2014-04 发布)之前服务器使用的用户文件迁移。服务器极不可能需要这样做,而且需要联系 Mojang API。因此默认跳过迁移
disable-legacy-query-handler bool true 禁用旧版/1.7 之前(2013-10 发布)的查询/ping 处理器
log-connection-init-ips bool false 以 INFO 级别记录所有初始化/发起连接的远程 IP
客户端

所有客户端专属选项都可以在游戏选项 UI 中更改/查看(见上文)。

常见问题

我在哪里可以找到我的公钥?

公钥可以在以下位置找到/复制:

  • Options > Online... > AuthBack... > Key management
  • 或者如果安装了 ModMenu:Mods > AuthBack > Click Icon/Settings > Key management

认证服务器宕机了,我在服务器上安装了此模组,但我无法加入

这是因为服务器不知道你的公钥。

你可以通过以下方式解决:

  1. 确保你在一个月内登录过该服务器
    • 这是因为 usercache.json 中的条目——在这种情况下会被使用——将在一个月后过期
  2. 确保你可以通过服务器控制台/RCON 运行命令
  3. 将模组添加到你的本地客户端/游戏并启动它
  4. 然后从那里复制公钥(详情见上文)
  5. 然后在服务器上将公钥与你的账户关联:
    • /authback public_key add name <yourName> <yourPublicKey>
    • 或 /authback public_key add id <yourUUID> <yourPublicKey>

现在你应该能够像往常一样登录了。
但请注意,与档案相关的内容(如皮肤)将不会显示。

还建议在服务中断结束后重启服务器,以正确加载现有档案。

认证服务器宕机了,我的朋友安装了此模组,但他们无法加入我的服务器

这是因为他们之前从未在安装此模组的情况下加入过。

如果你是管理员,可以通过以下方式解决:

  1. 告诉你的朋友在安装此模组的情况下启动游戏
  2. 并将他们的公钥(参见上文“我在哪里可以找到我的公钥?”)发送给你
  3. 通过运行 /authback public_key add name <yourFriendsPlayerName> <yourFriendsPublicKey> 在服务器上将公钥与他们关联

我如何测试回退认证?

  1. 确保服务器知道你的公钥(你可以使用 /authback public_key list 在服务器上检查)
  2. 确保服务器上启用了 fallback-auth.allow-always(默认应已启用)
  3. 以离线模式启动客户端
  4. 在客户端选项中启用 Suppress any joinServer error
  5. 现在你应该能够使用回退认证加入服务器了。查看日志以了解详情。

此模组将数据存储在哪里?

在游戏目录(例如 %APPDATA%\.minecraft)内的 .mods\authback 目录中。