问题概述
Minecraft Java版开启了正版验证的服务器,以及正版玩家联机时,加入游戏显示“身份验证服务器目前处于宕机状态”,无法连接至服务器。
如图:

如果是服务器可以在控制台看到以下报错:

问题原因
Minecraft开启了正版验证的服务器,玩家加入游戏时,游戏服务器会连接到Mojang的身份验证服务器来验证玩家账号是否为正版账号。而出现此问题大概率是网络问题导致无法连接到Mojang的身份验证服务器。
使用TCPing测试Mojang的身份验证服务器似乎都没有问题,但就是无法连接,或者连接不稳定,有时候正常,有时候无法连接。接下来是解决方法。
解决方法
服务器解决方法
通过设置服务器的启动参数,将身份验证API改为代理API。
- 参数:
-Dminecraft.api.account.host=https://mcsp.xovox.dev/api-mojang -Dminecraft.api.session.host=https://mcsp.xovox.dev/session-mojang -Dminecraft.api.services.host=https://mcsp.xovox.dev/api-minecraft
- 解释:
这三个参数会将Mojang身份验证用的三个API设置为我搭建的反向代理API。此API会代理到官方身份验证服务器,使用Cloudflare做中转,网络质量说不上很好,至少国内外都能连上。当然如果有条件强烈建议自建反向代理API,只有自己在用可以确保稳定性,还能保证安全性,详情可见文章后半部分。
- 使用方法:
一般服务端的启动命令为java -jar xxx.jar
,只需要将上面的参数加到java
后面即可:java [参数] -jar xxx.jar
。
例如你服务器的启动命令为:java -jar paper.jar
,修改后的启动命令为:
java -Dminecraft.api.account.host=https://mcsp.xovox.dev/api-mojang -Dminecraft.api.session.host=https://mcsp.xovox.dev/session-mojang -Dminecraft.api.services.host=https://mcsp.xovox.dev/api-minecraft -jar paper.jar
这里要根据你服务器原本的启动命令修改,不要直接使用这个示例命令!
如果使用的是MCSM面板,可以在“应用实例->功能组->应用实例设置”中找到启动命令配置。
修改配置后重启服务器,日志中出现以下输出则表示配置生效(部分服务端可能不显示,仅供参考):

异地联机解决方法
如果你在使用自定义联机MOD等方法进行联机时遇到此问题,那你只需让创建多人游戏的人在启动器中添加以下参数:
-Dminecraft.api.account.host=https://mcsp.xovox.dev/api-mojang -Dminecraft.api.session.host=https://mcsp.xovox.dev/session-mojang -Dminecraft.api.services.host=https://mcsp.xovox.dev/api-minecraft
和上面服务器的启动参数是一样的,只是启动器的话通常是加在“启动参数,Java/JVM参数”等配置项中,例如PCL启动器:

只需要在原本的参数后面敲个空格,然后粘贴上面的参数即可。
自建反向代理API
为了节省成本我是用Cloudflare的workers做的反向代理,网络质量很一般。但是对于要求不高的服务器问题不大,一般也不会出现连接失败的情况。
代码放出来做参考:
const MOJANG_API = 'https://api.mojang.com';
const SESSION_API = 'https://sessionserver.mojang.com';
const MINECRAFT_SERVICES_API = 'https://api.minecraftservices.com';
//这是代理源,官方服务器的地址,一般不需要修改
addEventListener('fetch', event => {
event.respondWith(handleRequest(event.request))
})
async function handleRequest(request) {
const url = new URL(request.url);
// 根据路径前缀路由到不同的 API 服务
let targetUrl;
if (url.pathname.startsWith('/api-mojang')) {
targetUrl = new URL(url.pathname.replace('/api-mojang', ''), MOJANG_API);
} else if (url.pathname.startsWith('/session-mojang')) {
targetUrl = new URL(url.pathname.replace('/session-mojang', ''), SESSION_API);
} else if (url.pathname.startsWith('/api-minecraft')) {
targetUrl = new URL(url.pathname.replace('/api-minecraft', ''), MINECRAFT_SERVICES_API);
} else {
// 未匹配的路径返回 404
return new Response('Not Found', { status: 404 });
}
//上面的路径可以自行修改
// 保留原始查询参数
targetUrl.search = url.search;
const modifiedRequest = new Request(targetUrl.toString(), {
headers: request.headers,
method: request.method,
body: request.body,
redirect: 'follow'
});
const response = await fetch(modifiedRequest);
const modifiedResponse = new Response(response.body, response);
// 添加跨域支持
modifiedResponse.headers.set('Access-Control-Allow-Origin', '*');
modifiedResponse.headers.set('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS');
modifiedResponse.headers.set('Access-Control-Allow-Headers', 'Content-Type, Authorization');
return modifiedResponse;
}
return new Response(html, {
headers: {
'Content-Type': 'text/html; charset=UTF-8',
'Cache-Control': 'public, max-age=3600'
}
});
}
用法非常简单,只需要在Cloudflare创建一个workers,填入代码后绑定自己的域名即可,可以自行修改路径。
注意一定要绑定自己的域名,Cloudflare Workers自动分配的域名无法在大陆地区访问!
参考文章:
Minecraft 连不上认证 Mojang 认证服务器的一种解决方案:HTTP 转发 | fallen’s attic
暂无评论内容