<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wikivg.fentanylsolutions.org/index.php?action=history&amp;feed=atom&amp;title=ZH%3AAuthentication</id>
	<title>ZH:Authentication - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wikivg.fentanylsolutions.org/index.php?action=history&amp;feed=atom&amp;title=ZH%3AAuthentication"/>
	<link rel="alternate" type="text/html" href="https://wikivg.fentanylsolutions.org/index.php?title=ZH:Authentication&amp;action=history"/>
	<updated>2026-05-05T19:03:51Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.41.5</generator>
	<entry>
		<id>https://wikivg.fentanylsolutions.org/index.php?title=ZH:Authentication&amp;diff=23196&amp;oldid=prev</id>
		<title>imported&gt;Kaniol at 09:30, 11 November 2019</title>
		<link rel="alternate" type="text/html" href="https://wikivg.fentanylsolutions.org/index.php?title=ZH:Authentication&amp;diff=23196&amp;oldid=prev"/>
		<updated>2019-11-11T09:30:51Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 09:30, 11 November 2019&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-notice&quot; lang=&quot;en&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(No difference)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>imported&gt;Kaniol</name></author>
	</entry>
	<entry>
		<id>https://wikivg.fentanylsolutions.org/index.php?title=ZH:Authentication&amp;diff=22592&amp;oldid=prev</id>
		<title>imported&gt;Kaniol at 09:30, 11 November 2019</title>
		<link rel="alternate" type="text/html" href="https://wikivg.fentanylsolutions.org/index.php?title=ZH:Authentication&amp;diff=22592&amp;oldid=prev"/>
		<updated>2019-11-11T09:30:51Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Minecraft 1.6引入了一种全新的叫作&amp;#039;&amp;#039;&amp;#039;Yggdrasil&amp;#039;&amp;#039;&amp;#039;的认证方案，它彻底地取代了[[ZH:Legacy Authentication|先前的认证系统]]。Mojang的其他游戏，Scrolls，同样也使用了该认证方法。Mojang曾经说过[https://twitter.com/KrisJelbring/status/453573406341206016 每个人都应使用此认证系统来进行自定义登录]，但是[https://twitter.com/KrisJelbring/status/461390585086361600 永远不会从用户收集凭据]。&lt;br /&gt;
&lt;br /&gt;
== 请求格式 ==&lt;br /&gt;
所有对Yggdrasil的请求都会发送到以下服务器：&lt;br /&gt;
&lt;br /&gt;
 https://authserver.mojang.com&lt;br /&gt;
&lt;br /&gt;
此外，它们应满足以下规则：&lt;br /&gt;
&lt;br /&gt;
* 为&amp;lt;code&amp;gt;POST&amp;lt;/code&amp;gt;请求&lt;br /&gt;
* &amp;lt;code&amp;gt;Content-Type&amp;lt;/code&amp;gt;头设置为&amp;lt;code&amp;gt;application/json&amp;lt;/code&amp;gt;&lt;br /&gt;
* 以包含[[wikipedia:zh:JSON|JSON]]编码的字典作为负载&lt;br /&gt;
&lt;br /&gt;
如果请求成功，服务器将响应：&lt;br /&gt;
&lt;br /&gt;
* 状态码&amp;lt;code&amp;gt;200&amp;lt;/code&amp;gt;&lt;br /&gt;
* 根据以下规范使用[[wikipedia:zh:JSON|JSON]]编码的字典&lt;br /&gt;
&lt;br /&gt;
但如果请求失败，服务器会响应：&lt;br /&gt;
&lt;br /&gt;
* 适当的非200[[wikipedia:zh:HTTP状态码|HTTP状态码]]&lt;br /&gt;
* 拥有以下格式的[[wikipedia:zh:JSON|JSON]]编码的字典：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;error&amp;quot;: &amp;quot;错误的简短描述&amp;quot;,&lt;br /&gt;
    &amp;quot;errorMessage&amp;quot;: &amp;quot;用于向用户显示的更长的描述&amp;quot;,&lt;br /&gt;
    &amp;quot;cause&amp;quot;: &amp;quot;错误原因&amp;quot; // 可选的&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 错误 ==&lt;br /&gt;
&lt;br /&gt;
这些是可能遇到的一些错误：&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 ! 错误&lt;br /&gt;
 ! 原因&lt;br /&gt;
 ! 错误信息&lt;br /&gt;
 ! 注释&lt;br /&gt;
 |-&lt;br /&gt;
 | &amp;lt;code&amp;gt;Method Not Allowed&amp;lt;/code&amp;gt;&lt;br /&gt;
 |&lt;br /&gt;
 | The method specified in the request is not allowed for the resource identified by the request URI&amp;lt;br/&amp;gt;请求URI中标识的资源不允许使用请求中指定的方法&lt;br /&gt;
 | 收到了除POST请求以外的信息。&lt;br /&gt;
 |-&lt;br /&gt;
 | &amp;lt;code&amp;gt;Not Found&amp;lt;/code&amp;gt;&lt;br /&gt;
 |&lt;br /&gt;
 | The server has not found anything matching the request URI&amp;lt;br/&amp;gt;服务器未找到与请求URI匹配的任何内容&lt;br /&gt;
 | 调用了不存在的端点。&lt;br /&gt;
 |-&lt;br /&gt;
 | &amp;lt;code&amp;gt;ForbiddenOperationException&amp;lt;/code&amp;gt;&lt;br /&gt;
 | &amp;lt;code&amp;gt;UserMigratedException&amp;lt;/code&amp;gt;&lt;br /&gt;
 | Invalid credentials. Account migrated, use e-mail as username.&amp;lt;br/&amp;gt;无效凭据。账号已迁移，使用邮箱作为用户名。&lt;br /&gt;
 | &lt;br /&gt;
 |-&lt;br /&gt;
 | &amp;lt;code&amp;gt;ForbiddenOperationException&amp;lt;/code&amp;gt;&lt;br /&gt;
 | &lt;br /&gt;
 | Invalid credentials. Invalid username or password.&amp;lt;br/&amp;gt;无效凭据。无效的用户名或密码。&lt;br /&gt;
 | &lt;br /&gt;
 |-&lt;br /&gt;
 | &amp;lt;code&amp;gt;ForbiddenOperationException&amp;lt;/code&amp;gt;&lt;br /&gt;
 | &lt;br /&gt;
 | Invalid credentials.&amp;lt;br/&amp;gt;无效凭据。&lt;br /&gt;
 | 该用户名最近的尝试登录过多（见&amp;lt;code&amp;gt;/authenticate&amp;lt;/code&amp;gt;）。注意用户名和密码可能仍然有效！&lt;br /&gt;
 |-&lt;br /&gt;
 | &amp;lt;code&amp;gt;ForbiddenOperationException&amp;lt;/code&amp;gt;&lt;br /&gt;
 | &lt;br /&gt;
 | Invalid token.&amp;lt;br/&amp;gt;无效凭据。&lt;br /&gt;
 | &amp;lt;code&amp;gt;accessToken&amp;lt;/code&amp;gt;失效了。&lt;br /&gt;
 |-&lt;br /&gt;
 | &amp;lt;code&amp;gt;IllegalArgumentException&amp;lt;/code&amp;gt;&lt;br /&gt;
 | &lt;br /&gt;
 | Access token already has a profile assigned.&amp;lt;br/&amp;gt;访问令牌已经被分配了档案。&lt;br /&gt;
 | 还没有实现选择档案。&lt;br /&gt;
 |-&lt;br /&gt;
 | &amp;lt;code&amp;gt;IllegalArgumentException&amp;lt;/code&amp;gt;&lt;br /&gt;
 | &lt;br /&gt;
 | credentials is null&amp;lt;br/&amp;gt;凭据为空&lt;br /&gt;
 | 用户名/密码未提交。&lt;br /&gt;
 |-&lt;br /&gt;
 | &amp;lt;code&amp;gt;IllegalArgumentException&amp;lt;/code&amp;gt;&lt;br /&gt;
 | &lt;br /&gt;
 | Invalid salt version&amp;lt;br/&amp;gt;无效的盐版本&lt;br /&gt;
 | ？？？&lt;br /&gt;
 |-&lt;br /&gt;
 | &amp;lt;code&amp;gt;Unsupported Media Type&amp;lt;/code&amp;gt;&lt;br /&gt;
 | &lt;br /&gt;
 | The server is refusing to service the request because the entity of the request is in a format not supported by the requested resource for the requested method&amp;lt;br/&amp;gt;服务器拒绝为请求提供服务，因为请求实体的格式不受请求方法所请求的资源支持&lt;br /&gt;
 | 数据未提交为application / json&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
== 认证 ==&lt;br /&gt;
&lt;br /&gt;
使用密码认证用户。&lt;br /&gt;
&lt;br /&gt;
=== 端点 ===&lt;br /&gt;
&lt;br /&gt;
 /authenticate&lt;br /&gt;
&lt;br /&gt;
=== 负载 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;agent&amp;quot;: {                              // 默认为Minecraft&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;Minecraft&amp;quot;,                // 对于Mojang的其他游戏Scrolls，则应该使用&amp;quot;Scrolls&amp;quot;&lt;br /&gt;
        &amp;quot;version&amp;quot;: 1                        // 以后的原版客户端&lt;br /&gt;
                                            // 可能会增加该数字&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;username&amp;quot;: &amp;quot;mojang帐号名&amp;quot;,              // 可以是电子邮箱地址或&lt;br /&gt;
                                            // 玩家名称（对于为迁移的账号）&lt;br /&gt;
    &amp;quot;password&amp;quot;: &amp;quot;mojang帐号密码&amp;quot;,&lt;br /&gt;
    &amp;quot;clientToken&amp;quot;: &amp;quot;客户端标识符&amp;quot;,            // 可选的&lt;br /&gt;
    &amp;quot;requestUser&amp;quot;: true                     // 可选的，默认为false，若为true则将user对象加入到响应中&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;clientToken&amp;lt;/code&amp;gt;应该是一个随机生成的标识符而且必须每次请求都是相同的。原版启动器会在第一次运行时生成一个随机的（v4）UUID并保存，在后续每次请求中复用它。如果省略，那么服务器会生成一个基于Java的[http://docs.oracle.com/javase/7/docs/api/java/util/UUID.html#toString() &amp;lt;code&amp;gt;UUID.toString()&amp;lt;/code&amp;gt;]的随机令牌，它应该由客户端保存下来。然而这也会使用户之前在所有客户端上获取的&amp;lt;code&amp;gt;accessToken&amp;lt;/code&amp;gt;失效。&lt;br /&gt;
&lt;br /&gt;
=== 响应 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;accessToken&amp;quot;: &amp;quot;随机访问令牌&amp;quot;,               // 十六进制或JSON-Web-Token（未确认）[普通accessToken可以在JWT的响应中找到（使用‘.’分隔的第二部分，以Base64编码的JSON对象），在“yggt”键中]&lt;br /&gt;
    &amp;quot;clientToken&amp;quot;: &amp;quot;客户端标识符&amp;quot;,               // 与接收到的相同&lt;br /&gt;
    &amp;quot;availableProfiles&amp;quot;: [                     // 仅在接收到agent字段时出现&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;agent&amp;quot;: &amp;quot;minecraft&amp;quot;,              // 可能与之前值相同&lt;br /&gt;
            &amp;quot;id&amp;quot;: &amp;quot;档案标识符&amp;quot;,                  // 十六进制&lt;br /&gt;
            &amp;quot;name&amp;quot;: &amp;quot;玩家名称&amp;quot;,&lt;br /&gt;
            &amp;quot;userId&amp;quot;: &amp;quot;十六进制字符串&amp;quot;,&lt;br /&gt;
            &amp;quot;createdAt&amp;quot;: 1325376000000,        // 自1970年1月1日起的毫秒数&lt;br /&gt;
            &amp;quot;legacyProfile&amp;quot;: true或false,      // 即使为false也出现&lt;br /&gt;
            &amp;quot;suspended&amp;quot;: true或false,          // 可能为false&lt;br /&gt;
            &amp;quot;paid&amp;quot;: true或false,               // 可能为true&lt;br /&gt;
            &amp;quot;migrated&amp;quot;: true或false,         // 似乎即使是已迁移账号也为false…？（https://bugs.mojang.com/browse/WEB-1461）&lt;br /&gt;
            &amp;quot;legacy&amp;quot;: true或false              // 它仅为true时出现。默认为false。与较新的legacyProfile重复…&lt;br /&gt;
        }&lt;br /&gt;
    ],&lt;br /&gt;
    &amp;quot;selectedProfile&amp;quot;: {                       // 仅在接收到agent字段时出现&lt;br /&gt;
        &amp;quot;id&amp;quot;: &amp;quot;不含分隔符的uuid&amp;quot;,&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;玩家名称&amp;quot;,&lt;br /&gt;
        &amp;quot;userId&amp;quot;: &amp;quot;十六进制字符串&amp;quot;,&lt;br /&gt;
        &amp;quot;createdAt&amp;quot;: 1325376000000,&lt;br /&gt;
        &amp;quot;legacyProfile&amp;quot;: true或false,&lt;br /&gt;
        &amp;quot;suspended&amp;quot;: true或false,&lt;br /&gt;
        &amp;quot;paid&amp;quot;: true或false,&lt;br /&gt;
        &amp;quot;migrated&amp;quot;: true或false,&lt;br /&gt;
        &amp;quot;legacy&amp;quot;: true或false&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;user&amp;quot;: {                                  // 仅在请求负载中的requestUser为true出现&lt;br /&gt;
        &amp;quot;id&amp;quot;: &amp;quot;用户标识符&amp;quot;,                      // 十六进制&lt;br /&gt;
        &amp;quot;email&amp;quot;: &amp;quot;user@email.example&amp;quot;,         // 未迁移账号的哈希（？）值&lt;br /&gt;
        &amp;quot;username&amp;quot;: &amp;quot;user@email.example&amp;quot;,      // 未迁移账号的正常名称或已迁移账号的电子邮箱&lt;br /&gt;
        &amp;quot;registerIp&amp;quot;: &amp;quot;198.51.100.*&amp;quot;,          // 最后一位打码的IP地址&lt;br /&gt;
        &amp;quot;migratedFrom&amp;quot;: &amp;quot;minecraft.net&amp;quot;,&lt;br /&gt;
        &amp;quot;migratedAt&amp;quot;: 1420070400000,&lt;br /&gt;
        &amp;quot;registeredAt&amp;quot;: 1325376000000,         // 也许比profile的createdAt要早几分钟&lt;br /&gt;
        &amp;quot;passwordChangedAt&amp;quot;: 1569888000000,&lt;br /&gt;
        &amp;quot;dateOfBirth&amp;quot;: -2208988800000,&lt;br /&gt;
        &amp;quot;suspended&amp;quot;: false,&lt;br /&gt;
        &amp;quot;blocked&amp;quot;: false,&lt;br /&gt;
        &amp;quot;secured&amp;quot;: true,&lt;br /&gt;
        &amp;quot;migrated&amp;quot;: false,                     // 似乎即使migratedAt和migratedFrom出现时也为false…&lt;br /&gt;
        &amp;quot;emailVerified&amp;quot;: true,&lt;br /&gt;
        &amp;quot;legacyUser&amp;quot;: false,&lt;br /&gt;
        &amp;quot;verifiedByParent&amp;quot;: false,&lt;br /&gt;
        &amp;quot;properties&amp;quot;: [&lt;br /&gt;
            {&lt;br /&gt;
                &amp;quot;name&amp;quot;: &amp;quot;preferredLanguage&amp;quot;,   // 也许不会对所有账号显示&lt;br /&gt;
                &amp;quot;value&amp;quot;: &amp;quot;en&amp;quot;                  // Java locale格式 （https://docs.oracle.com/javase/8/docs/api/java/util/Locale.html#toString--）&lt;br /&gt;
            },&lt;br /&gt;
            {&lt;br /&gt;
                &amp;quot;name&amp;quot;: &amp;quot;twitch_access_token&amp;quot;, // 仅在关联twitch账号时出现（见https://account.mojang.com/me/settings）&lt;br /&gt;
                &amp;quot;value&amp;quot;: &amp;quot;twitch oauth token&amp;quot;  // OAuth 2.0令牌，字母+数字，如https://api.twitch.tv/kraken?oauth_token=[...]&lt;br /&gt;
                                               // Twitch API的文档：https://github.com/justintv/Twitch-API&lt;br /&gt;
            }&lt;br /&gt;
        ]&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;注意：&amp;#039;&amp;#039;&amp;#039;如果用户希望能在他们的电脑上保存登录状态，那么强烈建议应该存储&amp;lt;code&amp;gt;accessToken&amp;lt;/code&amp;gt;而不是密码本身。&lt;br /&gt;
&lt;br /&gt;
当前每个账号只拥有一个档案，一个账号拥有多个档案还在未来计划中。如果用户尝试登入一个没有附加Minecraft许可的Mojang账号，那么认证将会成功，但是响应将不包含&amp;lt;code&amp;gt;selectedProfile&amp;lt;/code&amp;gt;字段，而且&amp;lt;code&amp;gt;availableProfiles&amp;lt;/code&amp;gt;数组也是空的。&lt;br /&gt;
&lt;br /&gt;
有一些实例曾观察到Mojang对于旧版账号失败的刷新请求返回了一个平坦的&amp;lt;code&amp;gt;null&amp;lt;/code&amp;gt;。还不清楚什么实际错误绑定了这个空响应，而且它极为罕见，但作为实现应该注意对该响应的空输出。&lt;br /&gt;
&lt;br /&gt;
这个端点是严格速率限制的：短时间内同一账号的多次&amp;lt;code&amp;gt;/authenticate&amp;lt;/code&amp;gt;请求（例如在几秒内3次请求），即使密码正确也会导致一个&amp;lt;code&amp;gt;Invalid credentials.&amp;lt;/code&amp;gt;响应。该错误会在几秒后被清除。&lt;br /&gt;
&lt;br /&gt;
== 刷新 ==&lt;br /&gt;
&lt;br /&gt;
刷新一个有效的&amp;lt;code&amp;gt;accessToken&amp;lt;/code&amp;gt;。它可以用于在游戏会话间保持登录状态，这优于在文件中保存用户的密码（见[[ZH:lastlogin|lastlogin]]）。&lt;br /&gt;
&lt;br /&gt;
=== 端点 ===&lt;br /&gt;
&lt;br /&gt;
 /refresh&lt;br /&gt;
&lt;br /&gt;
=== 负载 ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;accessToken&amp;quot;: &amp;quot;有效的accessToken&amp;quot;,&lt;br /&gt;
    &amp;quot;clientToken&amp;quot;: &amp;quot;客户端标识符&amp;quot;,         // 这需要与第一处用来获取&lt;br /&gt;
                                         // accessToken的那个相同&lt;br /&gt;
    &amp;quot;selectedProfile&amp;quot;: {                 // 可选的，发送它将导致错误&lt;br /&gt;
        &amp;quot;id&amp;quot;: &amp;quot;档案标识符&amp;quot;,                // 十六进制&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;玩家名称&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;requestUser&amp;quot;: true                  // 可选的，默认为false，若为true则将user对象加入到响应中&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
注意：提供的&amp;lt;code&amp;gt;accessToken&amp;lt;/code&amp;gt;将失效。&lt;br /&gt;
&lt;br /&gt;
=== 响应 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;accessToken&amp;quot;: &amp;quot;随机访问令牌&amp;quot;,               // 十六进制&lt;br /&gt;
    &amp;quot;clientToken&amp;quot;: &amp;quot;客户端标识符&amp;quot;,               // 与接收到的相同&lt;br /&gt;
    &amp;quot;selectedProfile&amp;quot;: {&lt;br /&gt;
        &amp;quot;id&amp;quot;: &amp;quot;档案标识符&amp;quot;,                      // 十六进制&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;玩家名称&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;user&amp;quot;: {                                  // 仅在请求负载中的requestUser为true出现&lt;br /&gt;
        &amp;quot;id&amp;quot;: &amp;quot;用户标识符&amp;quot;,                      // 十六进制&lt;br /&gt;
        &amp;quot;properties&amp;quot;: [&lt;br /&gt;
            {&lt;br /&gt;
                &amp;quot;name&amp;quot;: &amp;quot;preferredLanguage&amp;quot;,   // 也许不会对所有账号显示&lt;br /&gt;
                &amp;quot;value&amp;quot;: &amp;quot;en&amp;quot;                  // Java locale格式（https://docs.oracle.com/javase/8/docs/api/java/util/Locale.html#toString--）&lt;br /&gt;
            },&lt;br /&gt;
            {&lt;br /&gt;
                &amp;quot;name&amp;quot;: &amp;quot;twitch_access_token&amp;quot;, // 仅在关联twitch账号时出现（见https://account.mojang.com/me/settings）&lt;br /&gt;
                &amp;quot;value&amp;quot;: &amp;quot;twitch oauth token&amp;quot;  // OAuth 2.0令牌，字母+数字，如https://api.twitch.tv/kraken?oauth_token=[...]&lt;br /&gt;
                                               // Twitch API的文档：https://github.com/justintv/Twitch-API&lt;br /&gt;
            }&lt;br /&gt;
        ]&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 验证 ==&lt;br /&gt;
&lt;br /&gt;
检查&amp;lt;code&amp;gt;accessToken&amp;lt;/code&amp;gt;是否可用于Minecraft服务器的认证。Minecraft启动器（自1.6.13版本起）会在启动器调用此端点来验证保存的令牌是否仍然可用，并会在返回错误时调用&amp;lt;code&amp;gt;/refresh&amp;lt;/code&amp;gt;。&lt;br /&gt;
&lt;br /&gt;
请注意&amp;lt;code&amp;gt;accessToken&amp;lt;/code&amp;gt;可能会不可用与Minecraft服务器的认证，而对于&amp;lt;code&amp;gt;/refresh&amp;lt;/code&amp;gt;来说足够可用。这主要会发生在一个人使用了另一个客户端（如在别的PC上使用相同的帐号游玩了Minecraft）。看起来只有给定帐号最新获得的&amp;lt;code&amp;gt;accessToken&amp;lt;/code&amp;gt;才能可靠地用于认证（第二新的令牌看起来也仍然有效，但请不要依赖它）。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;/validate&amp;lt;/code&amp;gt;可以在有或没有&amp;lt;code&amp;gt;clientToken&amp;lt;/code&amp;gt;时调用。如果提供了&amp;lt;code&amp;gt;clientToken&amp;lt;/code&amp;gt;，它应当与获取&amp;lt;code&amp;gt;accessToken&amp;lt;/code&amp;gt;的那个相匹配。Minecraft启动器会向&amp;lt;code&amp;gt;/validate&amp;lt;/code&amp;gt;发送&amp;lt;code&amp;gt;clientToken&amp;lt;/code&amp;gt;。&lt;br /&gt;
&lt;br /&gt;
=== 端点 ===&lt;br /&gt;
&lt;br /&gt;
 /validate&lt;br /&gt;
&lt;br /&gt;
=== 负载 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;accessToken&amp;quot;: &amp;quot;有效的accessToken&amp;quot;,&lt;br /&gt;
    &amp;quot;clientToken&amp;quot;: &amp;quot;关联的clientToken&amp;quot;    // 可选的，见上&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 响应 ===&lt;br /&gt;
&lt;br /&gt;
若成功返回空响应（&amp;lt;code&amp;gt;204 No Content&amp;lt;/code&amp;gt;），否则返回错误JSON和状态码&amp;lt;code&amp;gt;403 Forbidden&amp;lt;/code&amp;gt;。&lt;br /&gt;
&lt;br /&gt;
== 登出 ==&lt;br /&gt;
&lt;br /&gt;
使用帐号的用户名和密码使&amp;lt;code&amp;gt;accessToken&amp;lt;/code&amp;gt;失效。&lt;br /&gt;
&lt;br /&gt;
=== 端点 ===&lt;br /&gt;
&lt;br /&gt;
 /signout&lt;br /&gt;
&lt;br /&gt;
=== 负载 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;username&amp;quot;: &amp;quot;mojang帐号名称&amp;quot;,&lt;br /&gt;
    &amp;quot;password&amp;quot;: &amp;quot;mojang帐号密码&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 响应 ===&lt;br /&gt;
&lt;br /&gt;
若成功返回一个空负载。&lt;br /&gt;
&lt;br /&gt;
== 使失效 ==&lt;br /&gt;
&lt;br /&gt;
使用client/access令牌对使&amp;lt;code&amp;gt;accessToken&amp;lt;/code&amp;gt;失效。&lt;br /&gt;
&lt;br /&gt;
=== 端点 ===&lt;br /&gt;
&lt;br /&gt;
 /invalidate&lt;br /&gt;
&lt;br /&gt;
=== 负载 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;accessToken&amp;quot;: &amp;quot;有效的accessToken&amp;quot;,&lt;br /&gt;
    &amp;quot;clientToken&amp;quot;: &amp;quot;客户端标识符&amp;quot;          // 这需要与第一处用来获取&lt;br /&gt;
                                         // accessToken的那个相同&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 响应 ===&lt;br /&gt;
&lt;br /&gt;
若成功返回一个空负载。&lt;br /&gt;
&lt;br /&gt;
== 加入服务器  ==&lt;br /&gt;
&lt;br /&gt;
见[[ZH:协议加密#认证|协议加密#认证]]&lt;br /&gt;
&lt;br /&gt;
[[Category:ZH:Protocol Details]]&lt;br /&gt;
[[Category:ZH:Minecraft Modern]]&lt;/div&gt;</summary>
		<author><name>imported&gt;Kaniol</name></author>
	</entry>
</feed>