惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

C
Check Point Blog
罗磊的独立博客
量子位
Microsoft Azure Blog
Microsoft Azure Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
J
Java Code Geeks
M
MIT News - Artificial intelligence
月光博客
月光博客
IT之家
IT之家
D
DataBreaches.Net
A
About on SuperTechFans
博客园 - 三生石上(FineUI控件)
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Last Week in AI
Last Week in AI
D
Docker
The GitHub Blog
The GitHub Blog
B
Blog
V
Visual Studio Blog
博客园 - Franky
N
Netflix TechBlog - Medium
博客园 - 【当耐特】
Martin Fowler
Martin Fowler
博客园 - 聂微东
U
Unit 42

泠泫凝的异次元空间

通过串口安装Linux | 泠泫凝的异次元空间 curl自编译 | 泠泫凝的异次元空间 飞塔分流配置实战 | 泠泫凝的异次元空间 Windows 安全启动证书检查 | 泠泫凝的异次元空间 Lxn-OneDriveCLI | 泠泫凝的异次元空间 华三交换机配置 ERPS 环网 | 泠泫凝的异次元空间 PVE 配置 VLAN 感知 | 泠泫凝的异次元空间 MT7922 无线网卡安装 | 泠泫凝的异次元空间 无显示输出 Linux 主机配置桌面显示 | 泠泫凝的异次元空间 Wireguard 部署 SOP 手册(自用) | 泠泫凝的异次元空间 Zabbix 7.4 通过钉钉发送告警提醒 | 泠泫凝的异次元空间 Debian with xfce 通过 VNC 共享屏幕 华三S6860 IRF堆叠 | 泠泫凝的异次元空间 iPad 应用侧载 | 泠泫凝的异次元空间 Smart DNS 分区解析 | 泠泫凝的异次元空间 建立 NFS 服务器并挂载到客户端 | 泠泫凝的异次元空间 将 Android 以 MTP 方式连接至 Debian PVE 虚拟机迁移至 vCenter | 泠泫凝的异次元空间 vCenter 虚拟机迁移至 PVE | 泠泫凝的异次元空间 PVE迁移时提示密钥验证失败 | 泠泫凝的异次元空间 修改Windows设备设置区域 | 泠泫凝的异次元空间 恢复 SecureCRT 7.x 保存的密码 | 泠泫凝的异次元空间 PVE 超融合下电与上电流程 | 泠泫凝的异次元空间 记一次Zabbix异常处理 | 泠泫凝的异次元空间 苹果设备保存SHSH2 | 泠泫凝的异次元空间 PVE超融合部署 | 泠泫凝的异次元空间 树莓派启用zram | 泠泫凝的异次元空间 在 Hyper-V 上安装 EVE-NG | 泠泫凝的异次元空间 Zabbix 部署与 Windows 硬件信息收集 | 泠泫凝的异次元空间 在WSL2中安装CUDA支持 | 泠泫凝的异次元空间
Minecraft 认证服务器代理 | 泠泫凝的异次元空间
Lxn's Area · 2026-05-15 · via 泠泫凝的异次元空间

针对国内网络环境对Minecraft的认证服务的污染问题做出的代理解决方案,常见的报错包括:Authentication servers are down. Please try again later, sorry![10:20:18] [User Authenticator #2/ERROR]: Couldn't verify username because servers are unavailable等。

基本原理与解决方案

说人话就是在国内Mojang和托管在Azure上的部分服务被墙了导致国内大概率访问不到这些API,于是通过Cloudflare Workers进行代理。这里假设已经配置好了,域名为minecraft-service.lxn.worker.dev,相关的worker.js放在文章末尾了。

用法

示例:

1
2
3
4
5
6
java -Xmx20G \
-Dminecraft.api.auth.host=https://minecraft-service.lxn.worker.dev/auth \
-Dminecraft.api.account.host=https://minecraft-service.lxn.worker.dev/account \
-Dminecraft.api.session.host=https://minecraft-service.lxn.worker.dev/session \
-Dminecraft.api.services.host=https://minecraft-service.lxn.worker.dev/service \
-jar fabric-server-mc.1.21.1-loader.0.18.4-launcher.1.1.1.jar nogui

注意-D指定的参数一定要在-jar之前否则不生效或者传不到。

Worker.js

该js基于 Fallen_Breath的动态 改进而来。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
addEventListener('fetch', event => {
event.respondWith(handleRequest(event.request))
})

const PATH_MAP = {
'/auth': 'authserver.mojang.com',
'/account': 'api.mojang.com',
'/session': 'sessionserver.mojang.com',
'/services': 'api.minecraftservices.com',
'/service': 'api.minecraftservices.com',
'/minecraft': 'api.minecraftservices.com'
}

async function handleRequest(request) {
let url = new URL(request.url)

if (url.pathname.startsWith('/mcauthproxy/')) {
url.pathname = url.pathname.replace('/mcauthproxy', '')
}

if (url.pathname === '/' || url.pathname === '' || url.pathname === '/favicon.ico') {
return new Response(
'Minecraft Proxy by lxnchan.cn, Service OK.',
{ status: 200 }
)
}

let isMatched = false

for (let prefix in PATH_MAP) {
if (
url.pathname === prefix ||
url.pathname.startsWith(prefix + '/')
) {
url.hostname = PATH_MAP[prefix]
url.pathname = url.pathname.replace(prefix, '')
isMatched = true
break
}
}

if (!isMatched) {
return new Response(
'API Not Found, path: ' + url.pathname,
{ status: 404 }
)
}

let headers = new Headers(request.headers)
headers.set('Host', url.hostname)

console.log(`Proxy ${request.url} -> ${url.toString()}`)

let modifiedRequest = new Request(url.toString(), {
method: request.method,
headers: headers,
body: ['GET', 'HEAD'].includes(request.method)
? undefined
: request.body
})

let response = await fetch(modifiedRequest)

return new Response(response.body, {
status: response.status,
statusText: response.statusText,
headers: response.headers
})
}

 上一篇

linux