Mojang API是Mojang提供的「應用程式編程接口」,允許使用者使用自編程式檢索玩家資料,它適用於第三方啟動器開發人員、伺服器運營商和外掛開發人員。
所有查詢目前限制為每10分鐘600次[1]。對於沒有購買遊戲的註冊帳戶,也可以進行部分資訊的查詢。
伺服器的請求與響應[]
伺服器能接受很多請求,如果沒有特殊說明,對於具有負載的請求伺服器有下面的限制:
- 請求頭中的
Content-Type
必須是application/json。如果不是,伺服器將返回HTTP狀態碼415。 - 如果請求中要求負載,則負載必須是一個有效的JSON文字。如果不是,伺服器將返回HTTP狀態碼400。
如果請求成功,伺服器會做出如下的響應:
- 一個成功的HTTP狀態碼(2XX)。
- 返回一個空的負載(這時伺服器返回狀態碼204)或是一個JSON文字。
如果請求失敗,伺服器會返回一個非2XX的HTTP狀態碼並返回形式如下方的負載:
- 根標籤
- error:對於錯誤的簡短介紹。
- errorMessage:錯誤資訊。
- cause:錯誤原因。
下面列出了一些常見的錯誤,在下文中不再重複說明。
HTTP狀態碼 | 錯誤(error) | 錯誤具體資訊(errorMessage) | 錯誤說明 |
---|---|---|---|
400 | IllegalArgumentException | (與具體API有關) | 請求中包含了錯誤或無效的參數。 |
MismatchedInputException | 請求負載中的JSON文字不滿足API要求的格式或請求負載不是有效的JSON文字。 | ||
JsonParseException | |||
401 | (返回空負載) | (返回空負載) | API要求使用訪問令牌,但是請求頭中沒有包含Authorization 或請求中的訪問令牌無效。
|
Unauthorized | The request requires user authentication | API要求使用訪問令牌,但是請求頭中沒有包含Authorization 。
| |
403 | ForbiddenOperationException | Forbidden | 訪問令牌無效。 |
404 | Not Found | The server has not found anything matching the request URI | 伺服器找不到請求的URI。 |
405 | Method Not Allowed | The method specified in the request is not allowed for the resource identified by the request URI | 接收到了錯誤請求方法的請求。 |
415 | Unsupported Media Type | 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 | 不支持的媒體類型,即請求頭Content-Type 不是API要求的類型。
|
取得玩家資訊[]
取得玩家資訊的API都不需要身份驗證得到的訪問令牌,部分API可以查詢沒有購買遊戲的註冊帳號。
取得玩家的UUID[]
- 輸入
玩家的名稱(不區分大小寫)。
- GET請求
https://api.mojang.com/users/profiles/minecraft/<玩家名称>
- 響應
- 根標籤
- id:玩家的UUID。
- name:正確大寫的玩家名稱。
- legacy:如果此帳號沒有遷移到Mojang帳號,輸出中包含此項。
- demo:如果是沒有購買遊戲的註冊帳號,輸出中包含此項。
- 示例
https://api.mojang.com/users/profiles/minecraft/jeb_
提供玩家jeb_的UUID。API的響應沒有空格和換行符,此處為使結構清晰而進行格式化處理:
{
"name": "jeb_",
"id": "853c80ef3c3749fdaa49938b674adae6"
}
- 錯誤資訊
- 如果沒有命名為這個名字的玩家,返回HTTP狀態碼404。
批量取得玩家UUID[]
- 負載
一個儲存小於10個的玩家名稱字串的JSON列表,玩家名稱不區分大小寫。
- POST請求
https://api.mojang.com/profiles/minecraft
- 響應
- 給定玩家的所有UUID列表。對於不存在的玩家名稱,將不返回任何結果。
- 玩家名稱。
- id:玩家的UUID。
- name:正確大小寫的玩家名稱。
- legacy:如果此帳號沒有遷移到Mojang帳號,輸出中包含此項。
- demo:如果是沒有購買遊戲的註冊帳號,輸出中包含此項。
- 玩家名稱。
- 示例
發送["jeb_","notch"]
。
[
{
"id": "853c80ef3c3749fdaa49938b674adae6",
"name": "jeb_"
},
{
"id": "069a79f444e94726a5befca90e38aaf5",
"name": "Notch"
}
]
- 錯誤資訊
HTTP狀態碼 | 錯誤(error) | 錯誤具體資訊(errorMessage) | 錯誤說明 |
---|---|---|---|
400 | CONSTRAINT_VIOLATION | size must be between 1 and 10 | 請求負載的JSON列表為空。 |
請求負載的JSON列表中元素數量大於10個。 | |||
Invalid profile name | 請求負載的JSON列表中含有空字串。 |
取得玩家的外觀和披風[]
- 輸入
玩家的UUID以及簽名的請求。可以在一分鐘後最早重複對給定UUID的查詢。
- GET請求
https://sessionserver.mojang.com/session/minecraft/profile/<UUID>
或https://sessionserver.mojang.com/session/minecraft/profile/<UUID>?unsigned=false
- 響應
- 根標籤
- id:玩家的UUID。
- name:正確大寫的玩家名稱。
- legacy:如果這個帳號是一個舊的Minecraft帳戶,這項才存在。
- properties:玩家屬性的列表。
- 示例
https://sessionserver.mojang.com/session/minecraft/profile/853c80ef3c3749fdaa49938b674adae6
返回如下結果:
{
"id": "853c80ef3c3749fdaa49938b674adae6",
"name": "jeb_",
"properties":
[
{
"name": "textures",
"value": "ewogICJ0aW1lc3R..."
}
]
}
其中 value使用Base64解碼之後的內容為:
{
"timestamp" : 1653838459263,
"profileId" : "853c80ef3c3749fdaa49938b674adae6",
"profileName" : "jeb_",
"textures" : {
"SKIN" : {
"url" : "http://textures.minecraft.net/texture/7fd9ba42a7c81eeea22f1524271ae85a8e045ce0af5a6ae16c6406ae917e68b5"
},
"CAPE" : {
"url" : "http://textures.minecraft.net/texture/9e507afc56359978a3eb3e32367042b853cddd0995d17d0da995662913fb00f7"
}
}
}
- 錯誤資訊
HTTP狀態碼 | 錯誤(error) | 錯誤具體資訊(errorMessage) | 錯誤說明 |
---|---|---|---|
204 | (返回空負載) | (返回空負載) | 此UUID不代表任何玩家。 |
400 | (無) | Not a valid UUID: <輸入的參數> | URI中的UUID無效。 |
Mojang身份驗證[]
對於Mojang帳號,要用下面的API進行身份驗證。身份驗證都使用了https://authserver.mojang.com
這個伺服器。
驗證並取得訪問令牌[]
驗證的請求次數很嚴格,在幾秒內僅能請求3次。
- 負載
- 根標籤
- agent:遊戲資訊。
- name:遊戲名稱。固定值
Minecraft
。 - version:版本。固定值1。
- name:遊戲名稱。固定值
- username:帳號名稱,是一個電子郵件地址。對於未遷移的帳號,可以是玩家名稱。
- password:帳號密碼。
- clientToken:用戶端令牌,可選參數。所有的請求都要用統一的用戶端令牌。啟動器應該在第一次執行時生成一個令牌,並且需要在以後的請求中使用它。如果請求中不提供用戶端令牌,那麼伺服器會隨機生成一個令牌返回給用戶端,用戶端應該儲存這個令牌並用於之後的請求,但是這樣做會讓用戶端之前獲得的訪問令牌失效。
- requestUser:響應是否包含
user
對象,可選參數,預設為false。
- agent:遊戲資訊。
- POST請求
/authenticate
- 響應
- 根標籤
- user:帳號資訊,只有當請求中
requestUser
為true時才存在。- username:帳號名稱,是一個電子郵件地址。對於未遷移到Mojang帳號的帳號是玩家名稱。
- properties:帳號屬性。
- :一項屬性。
- name:屬性名稱,目前只有
preferredLanguage
和registrationCountry
。 - value:屬性的值。當 name為preferredLanguage時為語言;當 name為registrationCountry時為註冊時的國家資訊。
- name:屬性名稱,目前只有
- :一項屬性。
- id:帳號的遠程ID,是一個16進制的字串。
- clientToken:用戶端令牌。
- accessToken:訪問令牌。
- availableProfiles:可用的玩家配置資訊。
- :一項配置資訊。
- name:玩家名稱。
- id:玩家的UUID。
- :一項配置資訊。
- selectedProfile:現在正在使用的玩家配置資訊。
- name:玩家名稱。
- id:玩家的UUID。
- user:帳號資訊,只有當請求中
- 錯誤資訊
HTTP狀態碼 | 錯誤(error) | 錯誤具體資訊(errorMessage) | 錯誤說明 |
---|---|---|---|
403 | ForbiddenOperationException | Invalid credentials. Account migrated, use email as username. | 帳號已經遷移。 |
Invalid credentials. Invalid username or password. | 帳號名或密碼錯誤。 | ||
Invalid credentials. | 嘗試登入次數過於頻繁。 | ||
Forbidden | 帳號名或者密碼不符合要求。 | ||
410 | ResourceException | Gone (410) - The requested resource is no longer available at the server and no forwarding address is known | 帳號已經遷移到Mircosoft帳號。 |
GoneException |
刷新訪問令牌[]
- 負載
- 根標籤
- accessToken:訪問令牌,在請求之後這個令牌將會失效。
- clientToken:用戶端令牌,要與驗證時的令牌一致。
- selectedProfile:現在正在使用的玩家配置資訊。
- id:玩家的UUID。
- name:玩家名稱。
- requestUser:響應是否包含 user,可選參數,預設為false。
- POST請求
/refresh
- 響應
- 根標籤
- accessToken:新的有效的訪問令牌。
- clientToken:用戶端令牌。
- selectedProfile:現在正在使用的玩家配置資訊。
- id:玩家的UUID。
- name:玩家名稱。
- user:帳號資訊,只有當請求中 requestUser為true時才存在。
- username:帳號名稱,是一個電子郵件地址。對於舊的Minecraft帳號是玩家名稱。
- id:帳號的遠程ID,是一個16進制的字串。
- properties:帳號屬性。
- name:屬性名稱,目前只有
preferredLanguage
和registrationCountry
。 - value:屬性的值。當 name為preferredLanguage時為語言;當 name為registrationCountry時為註冊時的國家資訊。
- name:屬性名稱,目前只有
- 錯誤資訊
HTTP狀態碼 | 錯誤(error) | 錯誤具體資訊(errorMessage) | 錯誤說明 |
---|---|---|---|
403 | ForbiddenOperationException | Invalid token. | 無效的訪問令牌。 |
Token does not exist. | 用戶端令牌和當時請求此訪問令牌的用戶端令牌不一致。 |
檢查訪問令牌有效性[]
- 負載
- 根標籤
- accessToken:要查詢的訪問令牌。
- clientToken:用戶端令牌,可選參數。如果提供了用戶端令牌,那麼它要和驗證時的令牌一致。
- POST請求
/validate
- 響應
如果令牌還有效那麼伺服器會返回HTTP狀態碼204。
- 錯誤資訊
HTTP狀態碼 | 錯誤(error) | 錯誤具體資訊(errorMessage) | 錯誤說明 |
---|---|---|---|
403 | ForbiddenOperationException | Invalid token. | 無效的訪問令牌。 |
Token does not exist. | 用戶端令牌和當時請求此訪問令牌的用戶端令牌不一致。 |
登出帳號[]
- 負載
- 根標籤
- username:帳號名稱。
- password:帳號密碼。
- POST請求
/signout
- 響應
如果登出成功伺服器將返回一個空的負載。
使訪問令牌無效[]
- 負載
- 根標籤
- accessToken:訪問令牌,在請求之後這個令牌將會失效。
- clientToken:用戶端令牌,要與驗證時的令牌一致。
- POST請求
/invaildate
- 響應
如果使令牌成功無效化伺服器將返回一個空的負載。
- 錯誤資訊
HTTP狀態碼 | 錯誤(error) | 錯誤具體資訊(errorMessage) | 錯誤說明 |
---|---|---|---|
403 | ForbiddenOperationException | Invalid token. | 無效的訪問令牌。 |
Token does not exist. | 用戶端令牌和當時請求此訪問令牌的用戶端令牌不一致。 |
Microsoft身份驗證[]
對於Microsoft帳號和已經從Mojang帳號遷移到Microsoft的帳號要使用下面的API進行身份驗證。
在使用Microsoft驗證之前,必須要透過建立Microsoft Azure應用程式來獲得OAuth 2.0用戶端ID和密鑰。擁有這兩個資料,就可以取得Microsoft令牌。請注意:在取得令牌時scope
參數中應包含XboxLive.signin,否則無法進行取得Xbox Live令牌等操作。
使用Microsoft令牌取得Xbox Live令牌[]
- 負載
- 根標籤
- Properties:驗證屬性。
- AuthMethod:登入方法。固定值
RPS
。 - SiteName:站點名稱。固定值
user.auth.xboxlive.com
。 - RpsTicket:登入使用的票據。值為
d=<Microsoft访问令牌>
。
- AuthMethod:登入方法。固定值
- RelyingParty:依賴的平台。固定值
http://auth.xboxlive.com
。 - TokenType:訪問令牌的類型。固定值
JWT
。
- Properties:驗證屬性。
- POST請求
https://user.auth.xboxlive.com/user/authenticate
要求SSL實現支持SSL重協商。
- 響應
- 根標籤
- IssueInstant:取得Xbox Live令牌的時間。
- NotAfter:Xbox Live令牌過期時間。
- Token:Xbox Live訪問令牌。
- DisplayClaims:未知。
- xui:未知。
-
- uhs:使用者的哈希碼。
-
- xui:未知。
使用Xbox Live令牌取得XSTS令牌[]
- 負載
- 根標籤
- Properties:驗證屬性。
- SandboxId:沙盒ID。固定值
RETAIL
。 - UserTokens:使用者的Xbox Live令牌。
- :使用者的Xbox Live令牌,在上一步取得。
- SandboxId:沙盒ID。固定值
- RelyingParty:依賴的平台。固定值
rp://api.minecraftservices.com/
。 - TokenType:訪問令牌的類型。固定值
JWT
。
- Properties:驗證屬性。
- POST請求
https://xsts.auth.xboxlive.com/xsts/authorize
要求SSL實現支持SSL重協商。
- 響應
- 根標籤
- IssueInstant:取得XSTS令牌的時間。
- NotAfter:XSTS令牌過期時間。
- Token:XSTS訪問令牌。
- DisplayClaims:未知。
- xui:未知。
-
- uhs:使用者的哈希碼。
-
- xui:未知。
- 錯誤資訊
如果沒有成功取得XSTS令牌,伺服器返回HTTP狀態碼401。
透過XSTS令牌取得Minecraft訪問令牌[]
- 負載
- 根標籤
- identityToken:身份令牌。值為
XBL3.0 x=<用户哈希码>;<XSTS访问令牌>
。
- identityToken:身份令牌。值為
- POST請求
https://api.minecraftservices.com/authentication/login_with_xbox
- 響應
- 根標籤
- username:一個UUID,但不是帳號的UUID。
- roles:未知,為空。
- access_token:Minecraft訪問令牌。
- token_type:令牌類型。固定值
Bearer
。 - expires_in:有效時間,以秒為單位。
驗證帳號是否擁有Minecraft[]
- 請求頭
Authorization
要求為Bearer <有效的Minecraft访问令牌>
。
- GET請求
https://api.minecraftservices.com/entitlements/mcstore
- 響應
如果帳號擁有Minecraft,伺服器將會返回下面的負載:
- 根標籤
- items:資料和簽名列表。
- name:資料名稱,
product_minecraft
或game_minecraft
。 - signature:資料的JWT簽名。
- name:資料名稱,
- signature:JWT簽名。
- keyID:未知。
- items:資料和簽名列表。
如果帳號不擁有Minecraft或者是XGP使用者,伺服器將返回空負載。
玩家配置操作[]
操作玩家配置的API基本都在https://api.minecraftservices.com
伺服器下,並且都要求請求頭包含Authorization
,且值為Bearer <有效的Minecraft訪問令牌>。如果請求頭不包含訪問令牌資訊或者訪問令牌無效,伺服器將返回HTTP狀態碼401。
取得配置資訊[]
- GET請求
/minecraft/profile
- 響應
- 根標籤
- id:玩家的UUID。
- name:玩家名稱。
- skins:玩家擁有的所有外觀資訊。
- :一個外觀。
- id:外觀的UUID。
- state:外觀的使用狀態。
- url:外觀的URL。
- variant:外觀類型。如果是Steve模型的外觀這一項是
CLASSIC
,如果是Alex模型的外觀這一項是SLIM
。
- :一個外觀。
- capes:玩家擁有的所有披風資訊。
- :一個披風。
- id:披風的UUID。
- state:披風的使用狀態。
- url:披風的URL。
- alias:披風的別名。
- :一個披風。
取得玩家屬性[]
- GET請求
/player/attributes
- 響應
- 根標籤
- privileges:玩家的能力。
- onlineChat:玩家接受聊天資訊的能力。
- enable:為真時玩家可以接受聊天資訊,為假時不能。
- multiplayerServer:玩家加入多人伺服器的能力。
- enable:為真時玩家可以加入多人伺服器,為假時不能。
- multiplayerRealms:玩家加入Realms的能力。
- enable:為真時玩家可以加入Realms,為假時不能。
- telemetry:玩家發送遙測資料的能力。
- enable:為真時玩家可以發送遙測資料。
- optionalTelemetry:玩家發送可選遙測資料的能力。
- enable:為真時玩家可以發送可選遙測資料。
- onlineChat:玩家接受聊天資訊的能力。
- profanityFilterPreferences:玩家Realms聊天過濾選項。
- profanityFilterOn:是否開啟Realms聊天過濾。
- banStatus:玩家封鎖狀態。
- bannedScopes:玩家封鎖的範圍。
- :玩家的封鎖範圍對象。如果玩家未被封鎖,則不存在這些對象。目前只有
MULTIPLAYER
項。- banId:封鎖的UUID。
- expires:封鎖到期時間。如果玩家被永久封鎖,這一項不存在。
- reason:封鎖原因。
- reasonMessage:封鎖訊息。
- :玩家的封鎖範圍對象。如果玩家未被封鎖,則不存在這些對象。目前只有
- bannedScopes:玩家封鎖的範圍。
- privileges:玩家的能力。
啟用/停用Realms聊天過濾[]
- 負載
- 根標籤
- profanityFilterPreferences:玩家Realms聊天過濾選項。
- profanityFilterOn:是否開啟Realms聊天過濾。
- profanityFilterPreferences:玩家Realms聊天過濾選項。
- POST請求
/player/attributes
- 響應
與取得玩家屬性的響應相同。
取得屏蔽玩家列表[]
- GET請求
/privacy/blocklist
- 響應
- 根標籤
- blockedProfiles:被屏蔽的玩家列表。這些玩家的聊天資訊和Realms邀請將不可見。
- :被屏蔽玩家的UUID。
- blockedProfiles:被屏蔽的玩家列表。這些玩家的聊天資訊和Realms邀請將不可見。
獲得簽名密鑰對[]
- POST請求
/player/certificates
- 響應
- 根標籤
- keyPair:簽名使用的密鑰對。
- privateKey:私鑰。以
-----BEGIN RSA PRIVATE KEY-----
開頭並以-----END RSA PRIVATE KEY-----
結束。 - publicKey:公鑰。以
-----BEGIN RSA PUBLIC KEY-----
開頭並以-----END RSA PUBLIC KEY-----
結束。
- privateKey:私鑰。以
- publicKeySignature:在剛加入簽名時使用的公鑰簽名。目前最新版本已經不再使用此簽名,而是V2版本的簽名。
- publicKeySignatureV2:公鑰簽名。
- expiresAt:密鑰對到期時間。
- refreshedAfter:密鑰對刷新時間。
- keyPair:簽名使用的密鑰對。
取得玩家名稱資訊[]
- GET請求
/profile/namechange
- 響應
- 根標籤
- changedAt:最近一次的名稱修改時間。
- createdAt:玩家配置建立的時間。
- nameChangeAllowed:是否允許修改名稱。
檢查禮品卡是否有效[]
- GET請求
/productvoucher/giftcode
- 響應
如果禮品卡有效,伺服器會返回HTTP狀態碼200或者204。如果禮品卡無效,伺服器將會返回HTTP狀態碼404。
檢查名稱可用性[]
- GET請求
/minecraft/profile/name/<要检查的名称>/available
- 響應
- 根標籤
- status:名稱的狀態。如果是
DUPLICATE
代表名稱已被占用,如果是AVAILABLE
代表名稱可用,如果是NOT_ALLOWED
代表名稱不符合要求。
- status:名稱的狀態。如果是
修改名稱[]
- 輸入
修改的名稱。
- PUT請求
/minecraft/profile/name/<修改的名称>
- 響應
- 根標籤
- id:玩家的UUID。
- name:修改之後的玩家名稱。
- skins:玩家擁有的所有外觀資訊。
- :一個外觀。
- id:外觀的UUID。
- state:外觀的使用狀態。
- url:外觀的URL。
- variant:外觀類型。如果是Steve模型的外觀這一項是
CLASSIC
,如果是Alex模型的外觀這一項是SLIM
。
- :一個外觀。
- capes:玩家擁有的所有披風資訊。
- :一個披風。
- id:披風的UUID。
- state:披風的使用狀態。
- url:披風的URL。
- alias:披風的別名。
- :一個披風。
- 錯誤資訊
HTTP狀態碼 | 錯誤(error) | 錯誤具體資訊(errorMessage) | 錯誤說明 |
---|---|---|---|
400 | CONSTRAINT_VIOLATION | changeProfileName.profileName: Invalid profile name | 名稱不符合要求(大於16個字元或含有非數字、字母和下劃線的字元)。 |
403 | (無) | Could not change name for profile | 不可以修改名稱。如果detail.status 是DUPLICATE說明此名稱已被占用。
|
429 | - | - | 發送了太多次改名請求。 |
更換外觀[]
- 負載
- 根標籤
- variant:外觀模型。如果是Steve模型要使用
classic
,如果是Alex模型要使用slim
。 - url:外觀的URL。
- variant:外觀模型。如果是Steve模型要使用
- POST請求
/minecraft/profile/skins
- 響應
如果更換成功,伺服器將返回空負載。
上傳外觀[]
- 負載
負載由兩部分組成。
variant
:外觀模型。如果是Steve模型要使用classic
,如果是Alex模型要使用slim
。file
:圖片資料。在上傳之後會將玩家的外觀設定為新上傳的這個外觀。
- POST請求
/minecraft/profile/skins
- 舉例
curl -X POST -H "Authorization: Bearer <access token>" -F variant=classic -F file="@steeevee.png;type=image/png" https://api.minecraftservices.com/minecraft/profile/skins
- 響應
如果上傳成功,伺服器將返回空負載。
重設外觀[]
- 輸入
玩家的UUID。
- DELETE請求
https://api.mojang.com/user/profile/<UUID>/skin
- 響應
如果操作成功,伺服器將返回空負載。
隱藏披風[]
- DELETE請求
/minecraft/profile/capes/active
- 響應
如果操作成功,伺服器將返回空負載。
顯示披風[]
- 負載
- 根標籤
- capeId:要顯示的披風的UUID。
- PUT請求
/minecraft/profile/capes/active
- 響應
- 根標籤
- id:玩家的UUID。
- name:玩家名稱。
- skins:玩家擁有的所有外觀資訊。
- :一個外觀。
- id:外觀的UUID。
- state:外觀的使用狀態。
- url:外觀的URL。
- variant:外觀類型。如果是Steve模型的外觀這一項是
CLASSIC
,如果是Alex模型的外觀這一項是SLIM
。
- :一個外觀。
- capes:玩家擁有的所有披風資訊。
- :一個披風。
- id:披風的UUID。
- state:披風的使用狀態。
- url:披風的URL。
- alias:披風的別名。
- :一個披風。
- 錯誤資訊
HTTP狀態碼 | 錯誤(error) | 錯誤具體資訊(errorMessage) | 錯誤說明 |
---|---|---|---|
400 | (無) | profile does not own cape | 玩家沒有指定的披風。 |
帳號遷移操作[]
和玩家配置操作的要求一樣,請求頭要包含Authorization
,且值為Bearer <有效的Minecraft訪問令牌>。如果請求頭不包含訪問令牌資訊或者訪問令牌無效,伺服器將返回HTTP狀態碼401。
驗證安全的登入位置[]
- GET請求
https://api.mojang.com/user/security/location
- 響應
如果是一個安全的位置,伺服器將返回HTTP狀態碼204。
- 錯誤資訊
HTTP狀態碼 | 錯誤(error) | 錯誤具體資訊(errorMessage) | 錯誤說明 |
---|---|---|---|
403 | ForbiddenOperationException | Current IP is not secured | 目前IP不安全。 |
取得安全驗證問題[]
- GET請求
https://api.mojang.com/user/security/challenges
- 響應
- 根標籤,內部有3個安全驗證問題對象。
- answer:答案資訊。
- id:答案的ID。發送安全驗證問題答案的時候需要附帶此ID。
- question:問題資訊。
- id:問題的ID。
- question:問題的描述。問題ID和問題描述一一對應。
- answer:答案資訊。
發送安全驗證問題答案[]
- 負載
- 根標籤,內部有3個安全驗證問題答案對象。
- id:答案的ID,與取得問題中的ID一致。
- answer:問題的答案。
- POST請求
https://api.mojang.com/user/security/challenges
- 響應
如果安全問題答案全部正確,伺服器將返回HTTP狀態碼204。
- 錯誤資訊
HTTP狀態碼 | 錯誤(error) | 錯誤具體資訊(errorMessage) | 錯誤說明 |
---|---|---|---|
403 | ForbiddenOperationException | At least one answer was incorrect | 答案不完全正確。 |
取得帳號遷移狀態[]
- GET請求
https://api.minecraftservices.com/rollout/v1/msamigration
- 響應
- 根標籤
- feature:查詢的功能。固定值
msamigration
。 - rollout:是否可以進行帳號遷移。
- feature:查詢的功能。固定值
獲得帳號遷移的一次性密碼[]
- POST請求
https://api.minecraftservices.com/twofactorauth/migration/otp
- 響應
如果帳號可以進行遷移,伺服器會返回HTTP狀態碼201並返回下面的JSON對象:
- 根標籤
- otpId:用於帳號遷移的一次性ID,稍後用於驗證發到帳號電子郵箱的一次性密碼。
驗證帳號遷移的一次性密碼[]
- 輸入
在取得一次性密碼時的一次性ID。
- 負載
- 根標籤
- otp:發送到帳號電子郵箱的一次性密碼。
- POST請求
https://api.minecraftservices.com/twofactorauth/migration/otp/<otpId>/verify
- 響應
如果驗證成功,伺服器將返回HTTP狀態碼204。
提交帳號遷移資料[]
- 負載
- 根標籤
- sessionEmail:帳號遷移的目標電子郵箱。
- POST請求
https://api.minecraftservices.com/migration/token
- 響應
如果成功,伺服器返回HTTP狀態碼200。
伺服器操作[]
取得屏蔽伺服器資訊[]
- GET請求
https://sessionserver.mojang.com/blockedservers
- 響應
伺服器將返回一個文字,每一行都是被屏蔽的伺服器的哈希碼。已知被屏蔽的伺服器可以在這裡找到,大約有2200條資料。
用戶端登入驗證[]
- 負載
- 根標籤
- accessToken:有效的Minecraft訪問令牌。
- selectedProfile:不帶有連字元的玩家UUID。
- serverId:伺服器的ID。
其中伺服器的ID由下方算法計算而成:
public static String generateServerId(String baseServerId, // 服务器的基础ID,通常为空字符串""
PublicKey publicKey, // 服务器的RSA公钥
SecretKey secretKey // 服务器与客户端之间使用的对称加密AES密钥
) throws Exception {
MessageDigest messageDigest = MessageDigest.getInstance("SHA-1");
messageDigest.update(baseServerId.getBytes("ISO_8859_1"));
messageDigest.update(secretKey.getEncoded());
messageDigest.update(publicKey.getEncoded());
byte[] digestData = messageDigest.digest();
return new BigInteger(digestData).toString(16);
}
- POST請求
https://sessionserver.mojang.com/session/minecraft/join
- 響應
如果驗證成功,伺服器返回HTTP狀態碼204。
伺服器登入驗證[]
- 輸入
不區分大小寫的玩家名稱、由上方算法得出的伺服器ID和用戶端IP(可選)。
- GET請求
https://sessionserver.mojang.com/session/minecraft/hasJoined?username=<玩家名称>&serverId=<服务器ID>&ip=<客户端IP>
- 響應
如果驗證成功,伺服器將返回和上方取得玩家的外觀和披風一樣的負載。
歷史[]
2014年4月14日 | Mojang API發布。 | ||||
---|---|---|---|---|---|
2020年11月 | 取得玩家UUID的API不再支持at參數。 | ||||
2021年10月8日 | 查詢Mojang API狀態的API被移除。在此之前,此API為https://status.mojang.com/check 。 | ||||
2022年5月8日 | 取得銷量統計資料的API被移除。在此之前,此API為https://api.mojang.com/orders/statistics 。 | ||||
2022年9月13日 | 查詢玩家歷史名稱的API被移除。在此之前,此API為https://api.mojang.com/user/profiles/<UUID>/names 。 |
參考[]
版本 | |||||||
---|---|---|---|---|---|---|---|
開發週期 |
| ||||||
技術 |
| ||||||
多人遊戲 | |||||||
遊戲訂製 |
語言