Mojang authenticate接口的标准请求Payload格式及400错误排查
问题原因分析
- 参数序列化错误:调用
requests.post时指定了请求体格式为JSON,但直接将Python字典传给了data参数,requests默认会将字典序列化为表单格式而非JSON字符串,导致服务端无法解析请求体返回400。 - 认证接口过时:
https://authserver.mojang.com/authenticate为已废弃的旧Mojang账号认证接口,仅支持未完成微软迁移的旧Mojang账号登录,所有已迁移至微软的账号均无法通过该接口完成认证。 - 原代码中
uuid变量名与导入的uuid模块重名,属于不规范的变量命名,虽然不会直接触发错误,但存在潜在的命名冲突风险。
修复方案
旧未迁移Mojang账号认证代码修复
修正参数序列化逻辑后即可正常请求,代码如下:
import requests import json from uuid import uuid4 # 避免和uuid模块重名,修改变量名 client_token = uuid4().hex payload = { "agent": { "name": "Minecraft", "version": 1 }, "username": "你的旧Mojang账号邮箱", "password": "旧Mojang账号密码", "clientToken": client_token, "requestUser": True } # 方案1:直接使用json参数传字典,requests会自动序列化并添加正确的请求头 response = requests.post("https://authserver.mojang.com/authenticate", json=payload) # 方案2:手动将字典转为JSON字符串再传给data参数 # response = requests.post("https://authserver.mojang.com/authenticate", headers={"content-type":"application/json"}, data=json.dumps(payload)) # 打印状态码和返回的JSON内容,不管是200还是错误码都可以拿到对应详情 print("响应状态码:", response.status_code) print("响应内容:", response.json())
已迁移微软账号适配说明
已迁移至微软的账号无法再使用旧Mojang认证接口,需要更换为微软OAuth2.0认证流程,核心步骤如下:
- 注册微软Azure应用获取客户端ID
- 引导用户完成微软账号授权,拿到授权码
- 使用授权码换取微软访问令牌
- 依次换取Xbox Live令牌、XSTS身份令牌
- 最终调用Minecraft官方接口换取游戏访问令牌和用户档案信息
内容的提问来源于stack exchange,提问作者GCMan
相关产品推荐
相关产品推荐

