SSSSSteven
本帖最后由 SSSSSteven 于 2023-8-22 01:54 编辑

产品研发过程中,我们经常会碰到需要验证用户是否持有正版 Minecraft 以及获取用户正版账号信息的场景。2023 年 9 月 19 日之后,旧的 Mojang 账户将无法登录,而 Microsoft 账户的正版验证流程又相当麻烦(要在 Azure Active Directory 上注册应用、要实现 MS 的 OAuth 授权流程、要往 Xbox Live 发好几个请求,还要处理各种异常,有时会因为网络原因根本没法完成认证流程),所以我就在想,能不能做一个正版认证平台,让别人不需要自己实现一遍复杂的 Microsoft 账户的正版验证流程,只需要向这个平台请求验证就可以。

我现在的想法是依托 LittleSkin 来打造这样的平台(如果你还不知道什么是 LittleSkin,可以查看 这个帖子 了解详情)。LittleSkin 今天也有超过一百万用户了,虽然不是每个人都用过但至少用户面还是比较广的,也有正版账号绑定的功能,那我们为什么不能把 LittleSkin 的正版绑定信息开放出去,让别人直接获取用户在 LittleSkin 上绑定的正版账号信息呢?于是就有了这个帖子。



这个 API 目前是实验性的,是我自己写的(众所周知我只是个产品经 理,不会写代码…),目前只有获取用户在 LittleSkin 的正版验证信息这一个功能,以后可能会进化成正版认证代理平台什么的。

目前整个流程其实还是 OAuth 那一套。


注册应用

首先,开发者需要注册一个 LittleSkin 账号,然后登录 LittleSkin 用户中心,在左边栏菜单中找到「高级功能」->「OAuth2 应用」,创建一个应用。需要填写的信息只有「应用名称」和「回调 URL」两项,其中「回调 URL」是用户完成 OAuth 授权后跳转回应用的地址。

应用添加完成后,页面上会显示应用的信息,包含「客户端 ID」、你刚刚填写的「应用名称」和「回调 URL」,还有「客户端 Secret」。请注意「客户端 Secret」应当严格保密,如果 Secret 泄露,那么他人就可以冒充你的应用请求 LittleSkin 的 API 了。


请求授权

然后,你需要把用户定向到 https://littleskin.cn/oauth/authorize,并带上以下 URL 参数:
client_id你的应用的「客户端 ID」 redirect_uri你的应用的「回调 URL」 response_type 固定为 codescope你的应用需要申请的权限列表,请求正版验证的权限是 PremiumVerification.Read
一个完整的请求示例:
GET /oauth/authorize?client_id=114514&redirect_uri=https%3A%2F%2Fexample.com%2Fcallback&response_type=code&scope=PermiumVerification.Read HTTP/1.1
Host: littleskin.cn:443
复制代码










不论用户是否授予权限,用户都会被重定向到你的应用的「回调 URL」,此时可能会有两种情况:

URL 参数中存在 error 参数,则表示请求授权失败,error_description 参数中会给出人类可读的失败原因(英语)URL 参数中存在 code 参数,则表示请求授权成功,应用需要取回这个 code 的值,后续用来换取请求用户信息时的使用的令牌(Access Token)。


获取令牌

接下来,你的应用需要在后台以 POST 方式请求 https://littleskin.cn/oauth/token,Content-Type 为 x-www-form-urlencoded,并在请求体中包含以下参数:
grant_type固定为 authorization_codeclient_id你的应用的「客户端 ID」client_secret你的应用的「客户端 Secret」redirect_uri你的应用的「回调 URL」code上一步获取到的 code
一个完整的请求示例:POST /oauth/token HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Host: littleskin.cn:443

grant_type=authorization_code&client_id=114514&client_secret=1919810&redirect_uri=https%3A%2F%2Fexample.com%2Fcallback&code=def50200b5b43589...
复制代码

如果成功,LittleSkin 会返回一个 JSON,包含以下内容:
access_token:用于请求用户信息的令牌(Access Token)refresh_token:用于刷新 Access Token 的令牌(Refresh Token)expires_in:Access Token 的有效期(秒)

一个完整的响应示例:
HTTP/1.1 200 OK
Content-Type: application/json

{
    "token_type": "Bearer",
    "expires_in": 31622400,
    "access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJS...",
    "refresh_token": "def50200884e3b6e..."
}复制代码


请求正版信息

此时就可以请求用户的正版信息了。应用需要在后台请求 https://littleskin.cn/api/premium-verification,认证方式为 Bearer Token,即在 HTTP 请求头中包含 Authorization 头部,值为 Bearer 。
一个完整的请求示例:
GET /api/premium-verification HTTP/1.1
Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJS...
Host: littleskin.cn:443复制代码

如果成功,并且用户已经在 LittleSkin 绑定了正版账号,LittleSkin 会返回 HTTP 200,响应体中包含一个 JSON,包含以下内容:

code:请求没问题的话一般来说都是 0,还没想好干啥用verified:用户是否已经绑定了正版账号uuid:用户的正版 UUID,无符号

一个完整的响应示例:
HTTP/1.1 200 OK
Content-Type: application/json

{
    "code": 0,
    "verified": true,
    "uuid": "f702c5d39d5c457f80c691c664757092"
}复制代码

如果成功,但用户未在 LittleSkin 绑定正版账号,则会返回 HTTP 404。

到这里就完成了整个正版验证流程。如果需要获取用户的正版账户的更多信息(角色名、使用的皮肤等),请自行请求 Mojang 官方的 API,相关 API 文档可以查阅 wiki.vg。



关于这个 API,如果有什么疑问,都可以在本帖下提出。
如果你喜欢我们提供的服务,欢迎给这个帖子评分(求求给点人气和金粒 QAQ 给别人的帖子加人气是不扣自己的人气的)、回复,或是通过爱发电捐助支持:
[afdian]tnqzh123[/afdian]
想要了解我们的最新动态,欢迎关注我们的 Twitter 账号:@LittleSkinChina

Copyright 2016-present LittleSkin. All rights reserved.