Skip to content

遵循 Yggdrasil API 的 Minecraft 外置登录验证服务器,本分支旨在修复源分支的安全问题、部分Bug以及一些美化工作。

License

Notifications You must be signed in to change notification settings

maplesusu/MioVerify

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

17 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

MioVerify

Static Badge Static Badge Static Badge Static Badge Static Badge

MioVerify是一个基于 Yggdrasil 服务端技术规范 实现的MC身份验证服务器。

本分支旨在修复源分支的安全问题和部分Bug。

什么是身份验证服务器?

就好比Minecraft启动器可以登录你的正版号一样。authlib-injector 实现了一种外置登录,允许玩家使用第三方的验证服务器。在登录时,同样会要求输入账号(一般是邮箱)和密码,并且可以上传和查看皮肤等。

另外,如果游戏服务器也使用了 authlib-injector,就可以做到一样的正版验证效果。

Yggdrasil API是一套规范,定义了如何实现身份验证。而MioVerify正是按照这个规范开发出的Web服务器。实际上,每个人都可以设计一个自己的验证服务器。

目前所有的主流启动器都已支持外置登录。

有关 Minecraft 的 authlib-injector 技术,请详见 yushijinhun/authlib-injector

实现功能

  • 账号密码登录获取 token,刷新 token
  • 验证和吊销 token,用户登出
  • 单一和批量获取角色 (Profile) 信息
  • 角色属性 RSA 签名
  • 服务器元数据自定义配置
  • 游戏服务器 session 会话验证
  • 材质上传和下载 (待完善)
  • 以上功能均遵守 Yggdrasil API
  • 扩展 API:玩家角色注册 (正在扩展)
  • SSL 支持,https 协议

开发工具

IDE: IntelliJ IDEA

版本管理: Git + Maven

本项目使用的技术:

  • Spring Boot, Spring AOP, Spring Web
  • JWT
  • Redis
  • Mybatis Plus (SQL)

测试工具:

  • Postman
  • HMCL-3.5.5
  • Spring Test
  • Navicat
  • redis-cli

使用教程

RELEASE 中获取最新的 Jar包 (或者自行 Maven package) 并解压到一个文件夹。

请手动从 Jar 中 (BOOT-INF\classes\application.yml) 复制 application.yml 到 Jar 所在的文件夹中。

务必 修改 application.yml 里面的配置项,如果没有填写任何数据库信息,将会在运行目录自动生成和使用 SQLite 数据库。

必须要先启动Redis服务器 并在配置里面填写好地址。(如果你是直接在本地启用 redis 服务器的则不需要填写,保持默认即可)

服务器配置详情已经在 application.yml 写清楚了。

在项目目录下输入命令行启动对应jar即可。

扩展API

不同于 Yggdrasil API,MioVerify 提供了一套扩展的API,方便调用实现注册等功能,但还需要前端或者客户端继续实现可视化操作。

以下都是 POST 请求,并且 Content-Typeapplication/json,属于请求体内容。

如果操作成功,则返回 200 OK,否则返回其它状态码。

注册用户

此特性必须要在配置中启用。

/extern/register/user

{
  "username": "用户名(请不要与已有的重复)",
  "password": "密码",
  "preferredLang": "偏好语言代号(不包含则默认为zh_CN)",
  "key": "密钥(配置中开启permission-key才必须包含)"
}

注册角色

此特性必须要在配置中启用。

/extern/register/profile

{
  "profileName": "要注册角色名(是否允许重复请在配置中设置)",
  "skinUploadAllow": "是否允许上传皮肤(不包含则默认为true)",
  "capeUploadAllow": "是否允许上传披风(不包含则默认为true)",
  "username": "要绑定的用户名",
  "password": "要绑定的用户密码(配置中开启profile-strict才必须包含)",
  "key": "密钥(配置中开启permission-key才必须包含)"
}

材质API

目前MioVerify实现类皮肤站功能用的是内嵌的实现,每次请求角色(Profile)json时中的材质url的域名在application.ymlserver-domain定义。如果服务器的域名是xxx.com,那么url将会类似这样:

"url": "http://xxx.com/texture/hash/{hash}"

另外,如果use-http选项为true,将会是这样的:

"url": "https://xxx.com/texture/hash/{hash}"

然而,如果要设置SSL支持,需要在配置中独立设置证书信息。

特别地,如果要获取默认的皮肤(可以在skins文件夹下更改),将会是以下:

http(s)://xxx.com/texture/skin/default

待实现

  • API地址指示(ALI)
  • 动态的材质资源来源
  • 密码密文存储
  • 域名和SSL完整支持
  • 后台管理网页(可能)
  • ...

开发信息

本项目由作者 FuziharaYukina 个人独立开发完成,可能存在亿点bug。

如果对此项目感兴趣,可以联系作者QQ1153624453加入开发团队

本项目遵循 Apache-2.0 license 开源协议。

扩展开发

当前分支由 pingguomc 维护。

About

遵循 Yggdrasil API 的 Minecraft 外置登录验证服务器,本分支旨在修复源分支的安全问题、部分Bug以及一些美化工作。

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Java 91.7%
  • HTML 8.3%