C#调用Mojang认证接口获取authToken返回403 Forbidden错误如何解决
403错误产生原因
- 核心原因:你调用的
https://authserver.mojang.com/authenticate是旧版Yggdrasil认证接口,仅支持未迁移的原Mojang账号登录。2021年Minecraft账号全量迁移到微软体系后,该接口已停止支持微软账号认证,迁移后的账号调用该接口会直接返回403。 - 缺少请求头校验:即使你使用的是未迁移的遗留Mojang账号,当前代码未设置
User-Agent请求头,Mojang服务端会拦截无合法标识的请求,直接返回403。 - JSON请求体格式错误:代码通过字符串拼接构造JSON,如果用户名/密码包含双引号、转义符等特殊字符,会导致JSON结构异常,服务端解析失败也可能返回403。
- 风控或账号限制:短时间内多次发起错误请求会触发服务端IP限流,或者账号本身存在封禁、异常状态,也会返回403错误。
解决方案
- 优先适配微软OAuth认证流程
所有迁移完成的微软账号必须走微软Azure AD OAuth 2.0认证链,流程为:- 申请Azure AD应用权限,引导用户完成微软账号登录授权获取授权码
- 用授权码兑换微软访问令牌,再依次获取Xbox Live令牌、XSTS令牌
- 用XSTS令牌调用Minecraft服务端接口兑换最终的Minecraft访问令牌,即可完成登录
- 兼容遗留Mojang账号的代码修改方案
如果你仍需要兼容未迁移的账号,可对现有代码做以下修改:- 添加合法
User-Agent请求头:
httpWebRequest.UserAgent = "Minecraft/1.20 (Windows; x64)";- 替换手动拼接JSON的逻辑,使用JSON序列化库构造请求体,避免格式错误,示例用System.Text.Json:
var requestBody = new { agent = new { name = "Minecraft", version = 1 }, username = username, password = password }; string json = JsonSerializer.Serialize(requestBody);- 添加异常捕获逻辑读取服务端返回的具体错误信息,方便精准定位问题:
try { // 原有请求逻辑 } catch (WebException ex) { using (var reader = new StreamReader(ex.Response.GetResponseStream())) { string errorDetail = reader.ReadToEnd(); // 输出errorDetail即可查看服务端返回的具体错误原因 } } - 添加合法
- 提前验证请求有效性
编码前可先用接口测试工具模拟请求,确认请求头、参数、接口可用性后再落地代码,减少调试成本。
内容的提问来源于stack exchange,提问作者Sodalym
相关产品推荐
相关产品推荐

