【免费下载链接】BedrockOnLinuxRun Minecraft Bedrock for Windows seamlessly on Linux.项目地址https://gitcode.com/gh_mirrors/be/BedrockOnLinux点击查看免费下载在BedrockOnLinux里登录微软账户背后其实是一条完整的 Xbox Live 认证链先拿到 MSAMicrosoft Account的 OAuth 令牌再依次换取 Xbox Live 的 device token、user token最后通过 XSTS 为每个业务多人、Realms、商店等签发 XSTS 令牌。本文用通俗的语言带你一步步拆解这条链路的每一步、令牌存在哪里、为什么这样设计以及登录失败时如何快速定位问题。一、先建立直觉登录为什么需要两把钥匙BedrockOnLinux 会把 Windows 版 Minecraft Bedrock 跑在 Linux 上。游戏文件来自 Microsoft Store在线功能来自 Xbox Live所以一次完整的体验需要两次登录README.md 的 Play 一节说明了这一点登录用途说明商店登录Store sign-in下载游戏由 bol/xodus.py 负责用你自己的账户从微软商店拉取游戏游戏内登录In-game login在线功能本文主角MSA → Xbox Live → XSTS 令牌链可以把整条链想象成接力赛 每一棒令牌只负责解锁下一棒——微软账户 (MSA refresh token) │ 换取 access token ▼ MSA access token ──┬──────────────┐ │ │ device auth user auth (设备身份) (账户身份) │ │ device token user token └──────┬───────┘ ▼ SISU / XSTS 授权 │ ┌─────────┬───────────┼───────────┬──────────┐ ▼ ▼ ▼ ▼ ▼ 个人资料 PlayFab 多人联机 Realms 商店授权 (profile) (成就/服务) (multiplayer) (Realms) (licensing)最终你会看到一条日志来自 bol/auth.pyXbox Live pre-auth: device, user, XBL, XSTS-achievements, SISU-pf, SISU-mp, SISU-realms, SISU-lic这行日志就是整条链路成功的成绩单。二、第一棒MSA 设备码登录启动器使用微软官方的Device Code Flow设备码流程这也是 Windows 游戏机、电视等没有浏览器的设备常用的登录方式。实现位于 bol/auth.py 的NativeAuth类向https://login.live.com/oauth20_connect.srf发起设备码请求代码见 bol/auth.py界面给出一个链接和一个短码user_code你在浏览器里打开链接、输入短码完成登录后台轮询令牌端点成功后只保存refresh token刷新令牌到本地文件。几个关键参数定义在 bol/config.py参数值作用MSA_CLIENT_ID0000000048183522微软为 Xbox 分配的固定 OAuth 应用 ID与 Windows 上游戏用的同一个MSA_SCOPEservice::user.auth.xboxlive.com::MBI_SSL申请的权限范围指向 Xbox Live 用户授权服务MSA_TOKENhttps://login.live.com/oauth20_token.srf令牌端点 设计细节令牌文件以0600权限原子写入bol/auth.py目录权限0700刷新令牌是账户的钥匙必须防窥。三、第二棒device auth 与 user auth有了 MSA access token 后bol/auth.py 的xbl_preauth()函数会在宿主机而不是 Wine 里完成 Xbox Live 的两次握手1️⃣ device.auth —— 我是哪台设备请求https://device.auth.xboxlive.com/device/authenticatebol/auth.py。这里有一个重要的工程细节启动器会为这台机器生成一把 EC P-256 椭圆曲线密钥对作为设备指纹Proof of Possession密钥和 device-id 保存在本地bol/auth.py文件内容device-key.pemP-256 私钥0600 权限device-id.txt设备 IDUUID之后每次发往 Xbox Live 的请求都会用这把密钥签名bol/auth.py签名格式刻意与 WineGDK 内部的DeviceAuth.c逐字节一致——因为服务器端就是这么验证的。2️⃣ user.auth —— 我是哪个玩家请求https://user.auth.xboxlive.com/user/authenticatebol/auth.py把 MSA access token 以RpsTickett…形式提交换回user token。这个令牌才真正携带了你是谁XUID、Gamertag的信息。为什么要在宿主机做这件事注释里写得很直白bol/auth.pyAzure 会把所有从 Wine 的 GnuTLS 发出的*.auth.xboxlive.com请求直接 TCP-RST 掉被识别为非 Windows 原生 Schannel。所以启动器用宿主机自己的 OpenSSL 栈来跑这条链然后把结果交给游戏内的xgameruntime.dll短路复用——游戏进程根本不再自己发这些请求。四、第三棒SISU 与 XSTS 为每个业务签发令牌前两步的令牌本身还不能直接玩在线功能。Xbox Live 采用按受众RelyingParty签发令牌的模式你想访问哪个服务就要拿 user token外加 device token去申请一张该服务专属的令牌。SISUsisu.xboxlive.com/authorize真实 Windows GDK 游戏走的路径唯一能返回现代 Gamertag 组件声明的入口所以优先使用bol/auth.pyXSTSxsts.auth.xboxlive.com/xsts/authorize当 SISU 拒绝HTTP 403时的后备通道用同样的 user token 签发同一批受众的令牌保证整条链不会因单点拒绝而失败。这条链最终为6 个受众各签发一张令牌bol/auth.py受众 (RelyingParty)用途http://xboxlive.com个人资料 / 玩家身份XUID、Gamertag、uhshttps://b980a380.minecraft.playfabapi.com/PlayFab成就、服务统计https://multiplayer.minecraft.net/多人联机、加入服务器ping 可用不代表能加入加入需要它https://pocket.realms.minecraft.net/Realms 经典地址Realms 仍按此受众校验http://licensing.xboxlive.com商店授权Marketplace 目录与购买校验http://xboxlive.comachievements成就上报专用令牌只要其中任何一个缺失启动器就拒绝写入半成品缓存宁可整链重跑也不覆盖一份原本可用的缓存bol/auth.py。五、令牌存哪里如何刷新如何安全退出存储布局路径内容~/.local/share/bedrock-on-linux/msa/token.jsonMSA refresh token…/winegdk-preauth/device.json完整的 Xbox Live 令牌链含上述 6 个受众…/winegdk-preauth/device-key.pem、device-id.txt设备密钥与设备 IDWine 前缀注册表Software\Wine\WineGDK的RefreshToken供游戏内 WineGDK 读取的 MSA 刷新令牌副本刷新与预热每次 PLAY 前bol/launch.py 会用 refresh token 换一份新鲜的 MSA access token再调用xbl_preauth()如果缓存的令牌链仍然未过期且有足够余量就直接复用跳过整条网络的往返。GUI 还会在登录完成瞬间就后台预热这条链bol/gui.py 的_warm_xbox_preauth——你点 PLAY 时令牌其实早就准备好了这也是点完登录按钮账户行变绿的原因只有 Xbox Live 点头行才会变绿。安全退出account epoch 机制 一个很精巧的防护device.json里有一个_account_epoch账户世代号。登出时会先轮换这个世代号再删除令牌文件bol/auth.py。效果是登出前已发出的登录响应如果姗姗来迟会因为世代号对不上被直接丢弃旧账户的令牌无法被复活换绑另一个微软账户时旧账户的缓存永远不会泄漏进新账户的会话。退出登录时会依次删除 Wine 注册表里的刷新令牌 → 轮换 epoch → 清除 Xbox 令牌 → 删除 MSA token 文件任何一步失败都会明确报错并中止fail closed。六、登录失败怎么排查启动器把认证失败归入少数几类诊断bol/auth.py每类都有对应的提示和解决办法类别典型原因怎么办age需要年龄/家庭账户验证错误码2148916236~238检查账户生日、加入 Microsoft 家庭组、调整 Xbox 隐私设置后重新登录account该微软账户没有 Xbox 档案或该地区不可用2148916233~235先到 xbox.com 登录一次完成 Xbox 档案创建/条款接受network连不上 Xbox Live检查网络/DNS/VPN/防火墙常见元凶是屏蔽了*.xboxlive.com的 DNS 广告过滤bol/xodus.pysession换账户与预授权发生竞争用当前账户重新启动游戏incomplete令牌链不完整核对 Xbox 档案设置后重试⚠️ 一个隐蔽的坑系统时钟不准。XSTS 请求是签名时间戳的宿主机时钟漂移会导致请求落在有效期窗口之外Xbox 的回应和账户不可用一模一样bol/auth.py。如果你看到account/age类报错但账户明明没问题先校时再下结论。另外记住一条产品原则bol/launch.pyXbox Live 只对在线功能负责。没有账号或 Xbox Live 不可达时Minecraft 仍以离线模式启动单人世界与局域网游戏照常可玩——认证链失败永远不会挡住你进自己的存档。七、延伸阅读完整启动流程与加密可执行文件的处理bol/launch.py认证链与诊断的实现bol/auth.py微软 OAuth 参数与 WineGDK 引擎版本锚点bol/config.py商店登录Xodus与令牌环实现bol/xodus.py构建与可复现管线说明docs/BUILD.md想动手看源码的话克隆仓库即可git clone https://gitcode.com/gh_mirrors/be/BedrockOnLinux.git小结BedrockOnLinux 的登录认证链可以浓缩为一句话用微软官方的 Device Code Flow 拿到 MSA 刷新令牌再在宿主机上以真 Windows 设备的身份走完 device auth → user auth → SISU/XSTS 六受众令牌链把结果落盘并交给游戏引擎短路复用——全程不经过任何第三方令牌有世代号保护、有原子写入、有原子刷新失败时降级到离线模式而不是把玩家挡在门外。理解这条链你就理解了为什么在 Linux 上也能有和 Windows 上一模一样的 Xbox 在线体验。赞分享【免费下载链接】BedrockOnLinuxRun Minecraft Bedrock for Windows seamlessly on Linux.项目地址https://gitcode.com/gh_mirrors/be/BedrockOnLinux点击查看免费下载相关推荐Elm 语言速成指南learnxinyminutes-docs 中的纯函数式 Web 前端编程入门Elm 语言速成指南learnxinyminutes docs 中的纯函数式 Web 前端编程入门 本篇技术指南以 learnxinyminutes docs戴森球计划终极蓝图库3000免费工厂设计快速上手指南戴森球计划终极蓝图库3000免费工厂设计快速上手指南 还在为戴森球计划中复杂的工厂布局而烦恼吗面对空荡荡的星球不知从何下手FactoryBluePrin数据集lakeFS Python SDK 认证令牌 AuthenticationTokenJWT 登录令牌模型与实战指南lakeFS Python SDK 认证令牌 AuthenticationTokenJWT 登录令牌模型与实战指南 本篇技术指南聚焦 lakeFS Pytho数据工程数据湖大数据对象存储后端上一篇tsParticles版本控制策略语义化版本的实践下一篇5步免费解锁IDM永久试用开源激活脚本终极使用指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考