
统一通行证的验证过程和Mojang官方的几乎一样，开发者可以在原有的Mojang验证方法上继承或者复制一份进行开发。
为了方便叙述，我们假设下文中的“($服务器ID)”为用户填写的32位服务器ID，该ID可从统一通行证服主后台获取。再假设下文中的“($BaseUrl)”为统一通行证验证的基地址。($BaseUrl)为 https://auth.mc-user.com:233/($服务器ID)/

启动器提供一个接口允许服主填入32位服务器ID或留空，并保存在本地

可以根据服主填写的服务器ID在启动器界面上提供注册页面接口，注册地址为：https://login.mc-user.com:233/($服务器ID)/loginreg

例如：https://login.mc-user.com:233/1234567890abcdef1234567890abcdef/loginreg

启动器通行证用户名内容输入不应做任何限制，用户可以输入所有字符甚至emoji，建议提示用户可以使用通行证用户名或通行证绑定的QQ邮箱登录

启动器每次启动后应从($BaseUrl)GET一次Json数据，该Json的meta数据中包含了一些服务器基本信息，例如serverIP、serverName，可方便服主随时调整客户端，其他字段请忽略。该Json中还包含了一条apiRoot数据，请将该值赋给($BaseUrl)。jarHash为客户端组件的sha1值，可作为检查更新使用。

启动器需要在header中指定“Content-Type”为“application/json”，并以POST方式将UTF-8编码的json向以下地址发送请求信息，请求格式和返回格式与Mojang验证完全兼容。

启动器验证流程：没有令牌时提示用户登录，有令牌时检查令牌是否有效，无效时尝试延长令牌有效期，令牌有效期延长失败时应提示用户登录。

将 https://authserver.mojang.com/authenticate 地址更改为：($BaseUrl)authserver/authenticate，作为首次登录通行证并保存令牌

例如：某个服主的ID是1234567890abcdef1234567890abcdef，则登录时需请求https://auth.mc-user.com:233/1234567890abcdef1234567890abcdef/authserver/authenticate

{
    "agent": {	// 可选
        "name": "Nide8 Minecraft Supreme Launcher",	// 你的启动器名称
        "version": 6.66	// 你的启动器版本
    },
    "username": "通行证用户名",
    "password": "通行证密码",
    "clientToken": "XXXXXXXX-XXXX-XXXX-XXXXXXXXXXXXXXXX",	// 客户端UUID，可选，如果为空服务器将返回，请保存该UUID在每次请求时使用
    "requestUser": true	// true为返回通行证信息，可选，默认不返回
}

返回

{
    "accessToken": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",	// 访问令牌
    "clientToken": "XXXXXXXX-XXXX-XXXX-XXXXXXXXXXXXXXXX",	// 客户端UUID
    "selectedProfile": {
        "id": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",	//玩家UUID
        "name": "游戏ID"
    },
    "availableProfiles": [
        {	// 等同于selectedProfile
            //...
        }
    ],
    "user": {	// requestUser为true时出现
        "id": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",	// 通行证UUID
        //...
    }
}

为了账号安全，禁止在客户端保存通行证密码！请使用accessToken和clientToken保存通行证令牌。用户多次登录失败时通行证可能会在一段时间内持续返回用户名或密码错误。

将 https://authserver.mojang.com/refresh 地址更改为：($BaseUrl)authserver/refresh，作为令牌返回无效时的延长令牌有效期操作，如返回延长失败请提示用户登录

{
    "accessToken": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",	// 访问令牌
    "clientToken": "XXXXXXXX-XXXX-XXXX-XXXXXXXXXXXXXXXX",	// 客户端UUID
    "requestUser": true	// true为返回通行证信息，可选，默认不返回
}

返回

{
    "accessToken": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",	// 访问令牌
    "clientToken": "XXXXXXXX-XXXX-XXXX-XXXXXXXXXXXXXXXX",	// 客户端UUID
    "selectedProfile": {
        "id": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",	//玩家UUID
        "name": "游戏ID"
    },
    "user": {	// requestUser为true时出现
        "id": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",	// 通行证UUID
        //...
    }
}

将 https://authserver.mojang.com/validate 地址更改为：($BaseUrl)authserver/validate，作为验证令牌是否有效

{
    "accessToken": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",	// 访问令牌
    "clientToken": "XXXXXXXX-XXXX-XXXX-XXXXXXXXXXXXXXXX",	// 客户端UUID
}

成功时返回204

为了及时止损用户操作不当导致令牌泄露，启动器可以选择增加销毁当前令牌和销毁所有令牌的接口。

将 https://authserver.mojang.com/invalidate 地址更改为：($BaseUrl)authserver/invalidate （可选，使用当前令牌退出所有该令牌在该服务器登录的客户端）

{
    "accessToken": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",	// 访问令牌
    "clientToken": "XXXXXXXX-XXXX-XXXX-XXXXXXXXXXXXXXXX",	// 客户端UUID
}

成功时返回204

将 https://authserver.mojang.com/signout 地址更改为：($BaseUrl)authserver/signout （可选，使用当前账号密码退出所有该通行证在该服务器登录的客户端）

{
    "username": "通行证用户名",
    "password": "通行证密码",
}

成功时返回204

如果遇到返回不是200或204，请参考以下格式处理

400,IllegalArgumentException：缺少请求的参数
403,ForbiddenOperationException：操作失败，具体返回详细信息在errorMessage

皮肤查询地址：($BaseUrl)sessionserver/session/minecraft/profile/($PROFILE_UUID)

返回

{
    "id": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",	// 玩家UUID
    "name": "玩家名称",
    "properties": [
        {
            "name": "textures",
            "value": "base64 字符串",
            "signature": "base64 字符串签名" // 仅在添加?unsigned=false到请求url时出现
        }
    ]
}
base64 字符串解码后为：
{
    "timestamp": 1xxxxxxxxx000,	// Java时间戳
    "profileId": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",	// 玩家UUID
    "profileName": "玩家名称",
    "signatureRequired": true,	// 仅在添加?unsigned=false到请求url时出现
    "textures": {
        "SKIN": {	// 可以不存在
            "url": "皮肤地址",
            "metadata": {"model": "slim"} // slim时为Alex身材，不存在时为Steve身材
        },
        "CAPE": {	// 可以不存在
            "url": "披风地址"
        }
    }
}

在启动游戏jar前，务必检查用户所选择Java版本是否大于等于8u101，低于此版本的Java将不支持统一通行证启动。

在启动游戏jar的时候需增加jvm参数 -javaagent:($nide8auth.jar路径)=($服务器ID) -Dnide8auth.client=true，可将nide8auth.jar路径在启动器中提供配置接口，当然像下面的范例固定位置也可以。

例如：java -javaagent:nide8auth.jar=1234567890abcdef1234567890abcdef -jar minecraft.jar

注意：由于java的bug，如果($nide8auth.jar路径)中存在等号=，则应该传相对路径避免该问题。

2020-04-09更新nide8auth.jar在客户端需指定-Dnide8auth.client=true参数，状态返回码为：0x80000000未知错误，0x80000001服务器id错误，0x80000002网络错误。

2023-03-22更新nide8auth.jar在客户端需指定-Dnide8auth.client=true参数，状态返回码为：0x80000000未知错误，0x80000001服务器id错误，0x80000002网络错误。
