Mojang API之Microsoft身份认证
前言
用C#编写的开源Mojang API Library已发布至Github,项目地址:https://github.com/GoodBoyboy666/Mojang-API
Microsoft身份验证
由于使用正常的OAuth流程十分麻烦,新建的OAuth应用程序必须申请使用Minecraft API的使用权限,因此这里使用PCL2的登录模式进行登录。
大致步骤如下:
- 获取Microsoft授权代码(一次性)
- 使用授权代码获取Microsoft令牌
- 使用Microsoft令牌获取Xbox Live令牌
- 使用Xbox Live令牌获取XSTS令牌
- 使用XSTS令牌获取Minecraft令牌
获取Microsoft授权代码
首先我们需求拼接授权验证页面的URL地址:
https://login.microsoftonline.com/consumers/oauth2/v2.0/authorize?client_id=
+ Client_ID
+ &response_type=code&redirect_uri=https:%2F%2Flogin.live.com%2Foauth20_desktop.srf&response_mode=query&scope=service%3A%3Auser.auth.xboxlive.com%3A%3AMBI_SSL
这里的Client ID为00000000402b5328
因此完整链接为:https://login.microsoftonline.com/consumers/oauth2/v2.0/authorize?client_id=00000000402b5328&response_type=code&redirect_uri=https:%2F%2Flogin.live.com%2Foauth20_desktop.srf&response_mode=query&scope=service%3A%3Auser.auth.xboxlive.com%3A%3AMBI_SSL
打开链接登录微软账号,完成授权后会跳转到一个空白页面,此时的页面地址应该为:https://login.live.com/oauth20_desktop.srf?code=M.C504_BL2.2.U.xxxxxxxxxxxxxxxxxxxxxx&lc=2052
而我们所需要的Microsoft授权代码即为code
参数内容:M.C504_BL2.2.U.xxxxxxxxxxxxxxxxxxxxxx
该代码为一次性授权代码。
获取Microsoft令牌
向地址https://login.live.com/oauth20_token.srf
发送POST请求,
Content-Type为application/x-www-form-urlencoded
,
内容为client_id=00000000402b5328&code=
+Microsoft授权代码
+&grant_type=authorization_code&redirect_uri=https%3A%2F%2Flogin.live.com%2Foauth20_desktop.srf&scope=service%3A%3Auser.auth.xboxlive.com%3A%3AMBI_SSL
请求成功后会返回一段json,找到其中的access_token
键,其键值为Microsoft令牌
获取Xbox Live令牌
拥有Microsoft令牌后开始获取Xbox Live令牌。
这里我们需要组建JSON内容,实际抓包测试后发现与wiki内容有出入,具体结构如下:
1 | { |
然后向https://user.auth.xboxlive.com/user/authenticate
发送POST请求,Content-Type为application/json
,内容为上面组建的JSON。
成功请求后会返回一段JSON内容,大致结构如下:
1 | { |
其中Token
的键值即为Xbox Live令牌
获取XSTS令牌
拥有Xbox Live令牌后开始获取XSTS令牌。
同样是组建JSON内容,具体结构如下:
1 | { |
组建完成后向https://xsts.auth.xboxlive.com/xsts/authorize
发送POST请求,Content-Type为application/json
,内容如上。
请求成功后返回一段JSON,大致结构如下:
1 | { |
获取Minecraft令牌
有XSTS令牌和User Hash后就可以开始请求最后的Minecraft令牌。
同样是组建JSON,具体结构如下:
1 | { |
后记
微软这套流程下来我头都秃了。。。
参考
Use this card to join MyBlog and participate in a pleasant discussion together .
Welcome to GoodBoyboy 's Blog,wish you a nice day .