来自accesstoken的Minecraft用户名/ uuid

时间:2018-01-24 05:58:34

标签: c# minecraft

我可以accesstoken,但我不知道如何从username获取uuidaccesstoken,当我登录时,它给了我类似的东西

  

{"的accessToken":" 123"" clientToken":" 123"" selectedProfile":{ " ID":" 123""名称":" playername"}" availableProfiles":[{&# 34; id":" 123"," name":" playername"}]}

谢谢!

private vstrong textoid Signin_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
    try
    {
        bool isSignedIn = false;
        if (isSignedIn == true)
        {
            var request = (HttpWebRequest)WebRequest.Create("https://authserver.mojang.com/invalidate");
            request.ContentType = "application/json";
            request.Method = "POST";

            using (var streamWriter = new StreamWriter(request.GetRequestStream()))
            {
                dynamic json = JsonConvert.SerializeObject(new
                {
                    accessToken = Settings.Default.accessToken,
                    clientToken = Settings.Default.clientToken
                });
            }
            Settings.Default.UUID = null;
            Settings.Default.accessToken = null;
            Settings.Default.clientToken = null;
        }
        else
        {
            var httpWebRequest = (HttpWebRequest)WebRequest.Create("https://authserver.mojang.com/authenticate");
            httpWebRequest.ContentType = "application/json";
            httpWebRequest.Method = "POST";

            using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream()))
            {
                dynamic json = JsonConvert.SerializeObject(new
                {
                    agent = new
                    {
                        name = "Minecraft",
                        version = 1
                    },
                    username = email.Text,
                    password = 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();
                ACCESS_TOKEN = result;
            } 
        }
    }
     catch (WebException)
    {
        MessageBox.Show("Login failed. Invalid username or password.");
    }
}
string ACCESS_TOKEN;

public string GetAccessToken()
{
    return ACCESS_TOKEN;
}

1 个答案:

答案 0 :(得分:0)

这是一个JSON响应,您需要反序列化才能最有效地使用。您可以使用以下代码执行此操作:

var loginResponse = JsonConvert.DeserializeObject<LoginResponse>(result);

现在,MinecraftLoginResponse需要是你自己创建的一个类,除非你有一个库用于此。 JSON由变量值组合组成,&#39;:&#39;之后的值由逗号分隔。 {}表示一个对象,[]表示一个集合。

在我的飞船响应中,你有两个物体;响应本身,然后是Profile对象。此响应的C#代码是:

public class Profile
{
    public string id { get; set; }
    public string name { get; set; }
}

public class LoginResponse
{
    public string accessToken { get; set; }
    public string clientToken { get; set; }
    public Profile selectedProfile { get; set; }
    public List<Profile> availableProfiles { get; set; }
}

我通过this website运行示例响应来完成上述操作,然后删除SelectedProfile和AvailableProfile,因为这些在逻辑上将是相同的。 (已选择将是可用的配置文件之一)。