关于Xbox Creators Program官方REST API鉴权与Web调用的技术咨询
Xbox Live官方REST API鉴权与调用指南(Web应用/Python/JS)
核心鉴权流程(绕过XSAPI wrapper)
Xbox Live REST API的鉴权本质是通过Microsoft Account(MSA)OAuth + Xbox身份服务(XSTS)获取有效令牌,步骤如下:
1. 获取MSA OAuth 2.0令牌
让用户通过MSA账号登录你的Web应用,获取access_token。需要先在Azure AD注册应用,并配置以下Xbox Live相关scope:
XboxLive.signinXboxLive.offline_access(可选,用于令牌刷新)
2. 交换Xbox用户身份令牌
用MSA令牌调用Xbox身份验证端点,获取用户哈希和用户身份令牌:
POST https://user.auth.xboxlive.com/user/authenticate Content-Type: application/json { "Properties": { "AuthMethod": "RPS", "SiteName": "user.auth.xboxlive.com", "RpsTicket": "d={MSA_ACCESS_TOKEN}" }, "RelyingParty": "http://auth.xboxlive.com", "TokenType": "JWT" }
从响应中提取Token(Xbox用户身份令牌)和DisplayClaims.xui[0].uhs(用户哈希)。
3. 获取Xbox Live访问令牌
用上述用户身份令牌和用户哈希调用XSTS端点,生成最终API访问令牌:
POST https://xsts.auth.xboxlive.com/xsts/authorize Content-Type: application/json { "Properties": { "SandboxId": "RETAIL", "UserTokens": ["{XBOX_USER_TOKEN}"] }, "RelyingParty": "https://xboxlive.com", "TokenType": "JWT" }
响应中的Token即为API调用所需的令牌,格式为Authorization: XBL3.0 x={USER_HASH};{XSTS_TOKEN}。
Python实现示例
import requests # 替换为实际获取的MSA令牌 msa_token = "YOUR_MSA_ACCESS_TOKEN" # 获取Xbox用户令牌 auth_response = requests.post( "https://user.auth.xboxlive.com/user/authenticate", json={ "Properties": { "AuthMethod": "RPS", "SiteName": "user.auth.xboxlive.com", "RpsTicket": f"d={msa_token}" }, "RelyingParty": "http://auth.xboxlive.com", "TokenType": "JWT" } ).json() xbox_user_token = auth_response["Token"] user_hash = auth_response["DisplayClaims"]["xui"][0]["uhs"] # 获取XSTS令牌 xsts_response = requests.post( "https://xsts.auth.xboxlive.com/xsts/authorize", json={ "Properties": { "SandboxId": "RETAIL", "UserTokens": [xbox_user_token] }, "RelyingParty": "https://xboxlive.com", "TokenType": "JWT" } ).json() xsts_token = xsts_response["Token"] # 调用示例API:获取当前用户游戏标签 headers = {"Authorization": f"XBL3.0 x={user_hash};{xsts_token}"} profile_response = requests.get( "https://profile.xboxlive.com/users/me/profile/settings?settings=Gamertag", headers=headers ).json() print(profile_response)
JavaScript(Node.js)实现示例
const axios = require('axios'); async function getXboxAuthToken(msaToken) { // 获取Xbox用户令牌 const authRes = await axios.post('https://user.auth.xboxlive.com/user/authenticate', { Properties: { AuthMethod: 'RPS', SiteName: 'user.auth.xboxlive.com', RpsTicket: `d=${msaToken}` }, RelyingParty: 'http://auth.xboxlive.com', TokenType: 'JWT' }); const xboxUserToken = authRes.data.Token; const userHash = authRes.data.DisplayClaims.xui[0].uhs; // 获取XSTS令牌 const xstsRes = await axios.post('https://xsts.auth.xboxlive.com/xsts/authorize', { Properties: { SandboxId: 'RETAIL', UserTokens: [xboxUserToken] }, RelyingParty: 'https://xboxlive.com', TokenType: 'JWT' }); const xstsToken = xstsRes.data.Token; return { authHeader: `XBL3.0 x=${userHash};${xstsToken}`, userHash }; } // 使用示例 getXboxAuthToken('YOUR_MSA_ACCESS_TOKEN').then(token => { axios.get('https://profile.xboxlive.com/users/me/profile/settings?settings=Gamertag', { headers: { Authorization: token.authHeader } }).then(res => console.log(res.data)); });
创作者计划权限说明
已加入Xbox Creators Program的应用,只要在Azure AD中配置了正确的Xbox Live权限,即可调用大部分公开REST API(如用户资料、好友列表、成就等)。部分敏感API需在Xbox开发者门户额外申请权限。
注意事项
- 严格遵守Xbox Live服务条款,避免API滥用
- API存在速率限制,需合理控制请求频率
- 令牌有效期有限,需利用MSA的
refresh_token实现自动刷新逻辑
内容的提问来源于stack exchange,提问作者Yoshikage Kira
相关产品推荐
相关产品推荐

