温馨提示:本文最后更新于2025年06月12日

问题概述

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

如图:

Minecraft游戏内截图:身份验证服务器处于宕机状态

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

服务器日志截图,玩家无法加入游戏

问题原因

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启动器:

PCL启动器截图,JVM参数头部设置

只需要在原本的参数后面敲个空格,然后粘贴上面的参数即可。

自建反向代理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

© 版权声明
THE END
喜欢就支持一下吧
点赞12 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容