首页 > 解决方案 > Minecraft 身份验证服务器返回 403 被禁止

问题描述

所以,我试图通过 C# 向 minecraft 身份验证服务器(https://authserver.mojang.com/authenticate)发送一个 POST 请求来创建一个新的 authToken ,但我收到以下错误:

System.Net.WebException: 'The remote server returned an error: (403) Forbidden.'

我当前尝试发送请求的代码是:

                public void ObtainAccessToken(string username, string password)
    {
        var httpWebRequest = (HttpWebRequest)WebRequest.Create("https://authserver.mojang.com/authenticate");
        httpWebRequest.ContentType = "application/json";
        httpWebRequest.Method = "POST";

        using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream()))
        {
            string json = "{\"agent\":{\"name\":\"Minecraft\",\"version\":1},\"username\":\"" + username + "\",\"password\":\"" + password + "\"}";

            streamWriter.Write(json);
            streamWriter.Flush();
            streamWriter.Close();

            var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
            using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
            {
                var result = streamReader.ReadToEnd();
                
            }
        }
    }

来自:https ://stackoverflow.com/a/28591279/17371073

我正在尝试登录已迁移的帐户

标签: c#postminecraft

解决方案


使用我几年前的 Java 实现作为参考,我看到的唯一区别是我已将写入Content-Charset UTF-8Content-Length有效负载字节大小添加到请求标头(即您编写的 json 字符串的字节大小) . 如果没有必要,我怀疑我永远不会这样做。

编辑:遵循HTTP 规范,您的请求仅在以下情况下才有效:

  • Content-Length在您的 HTTP 标头中包含该属性。
  • 发送 HTTP 请求后直接关闭连接。

由于您正在等待回复,因此您必须使用第一个选项。


推荐阅读