Minecraft(我的世界)中文论坛

 找回密码
 注册(register)

!header_login!

只需一步,立刻登录

查看: 184991|回复: 35

[软件开发讨论] 【外置登录】利用 Blessing Skin 皮肤站的 Yggdrasil API 插件实现外置登录功能

[复制链接]
ーのものー 当前离线
帖子
主题
精华
贡献
最后登录
1970-1-1
爱心
积分
2095
钻石
性别
保密
注册时间
2014-7-1
查看详细资料
发表于 2017-8-10 16:39:35 | 显示全部楼层 |阅读模式

您尚未登录,立即登录享受更好的浏览体验!

您需要 登录 才可以下载或查看,没有帐号?注册(register)

x
本帖最后由 ーのものー 于 2018-2-22 00:23 编辑
本文已于 2018-2-22 更新,添加了对 authlib-injector 的支持。

具体请查阅:https://github.com/printempw/yggdrasil-api/wiki

不知道诸君对 Minecraft 的正版登录系统(Yggdrasil API)有多少了解呢?

现在国内绝大多数运作于离线模式(online_mdoe=false)下的服务器都是使用的 Authme、CrazyLogin 等登录插件,也就是进入服务器之后再进行认证(e.g. /login <password>)的内置登录系统。虽然这样进入了服务器再登录的机制在小型服务器上没什么问题,但是服务器人一多,就容易出现各种各样的隐患了(假人、未登录也能发送指令 etc.),相信这方面各位腐竹都比较了解。

用过 Minecraft 正版登录的同学应该都知道,正版 Minecraft 是在进入游戏之前就要在【启动器】中进行登录操作的,而且只有登录之后你才能进入开了正版验证的服务器(online_mode=true)中游玩,否则是连服务器都进不去的。

目前也有很多第三方开发的【外置登录系统】都在尝试实现 Minecraft 正版登录的这一效果,这些软件无不都是将【登陆鉴权】这一操作从【进入服务器后】提到了【启动游戏前】来,配合服务端插件使用,在启动器中就是用账号密码登录后,启动游戏就可以直接进入服务器开玩了,比起 Authme 那样进入服务器还要输入指令登录不知道高到哪里去了。

这也是为什么软件开发版中那些「外置登录系统」很受欢迎的原因(包括不限于 MadAuth、WebLogin、BeeLogin、WebRegister、冰棂登陆系统),这样不仅提升了玩家的游戏体验以及服务器的安全性,还顺带能有一个「服务器专用启动器」,逼格不是高了一点半点(笑)

其实这些软件的原理就是将原本的登录鉴权这一步骤从游戏里抽出来了,将其放到启动器 or 网页上去,而服务端插件的功能就只剩下「查询数据库中用户的登录状态,决定是否放行」:




这样也没什么不好的,不是吗?那我今天要介绍的这种方法和那些「外置登录系统」有什么差别呢?

======== 神秘的分鸽线 ===========

★ 实现原理

其实说到底,那些「外置登录系统」都是致力于实现和 Mojang 官方的正版登录类似的体验(启动器中登录,启动游戏后直接就能进入服务器)。那么我们为何不来个大胆的想法,让 Mojang 那套正版登录的鉴权系统为我们所用?

这里必须要感谢 @yushijinhun 开发的 authlib-injector,正是因为有了这个开源项目,本帖所描述的方案才得以实现。

authlib-injector 是啥呢?简单来说,用了这玩意就可以把 Minecraft 内部写死的 Mojang 官方正版登录 API(也就是 Yggdrasil API)的地址给替换成自定义的地址(ASM 字节码替换),从而实现了和正版登录一样的功能:

  • 游戏外登录验证;
  • 对皮肤及披风的支持;
  • 对绝大多数客户端,服务端,启动器的支持(要求 JVM 语言编写,MC 1.7+);
  • 跨平台;


是不是很屌呢?如果你还是没听懂上面我讲的是什么鬼,那我就说得更通俗一些:

我们可以把 Mojang 官方正版登录的 API 【劫持】成我们自己的啦!

那么劫持之后能实现什么效果呢?

可以实现几乎和 Mojang 官方正版登录一样的效果。可以说,官方的正版登录有什么功能,使用 authlib-injector 后就能实现什么功能,甚至比 Mojang 官方的功能更多(e.g. 单用户多角色)。

不过这个方法只有唯一的一个弊端:

我们【劫持】了 Mojang 官方的 API,那也就意味着我们必须要实现一个和官方 Yggdrasil API 功能一模一样的 API。因为 authlib-injector 能做的只有替换掉 API 地址,至于我们的第三方 API,那就得靠我们自己去写代码实现了。

我相信,这对于绝大多数的同学都是非常痛苦的,你又要去查阅 Yggdrasil API 的文档(还没有提到很多自己实现时可能遇到的坑),还要从头开始写一个用户管理系统、角色系统、皮肤系统(上传管理、皮肤广场 etc.)、管理后台……天哪,这太可怕了!

虽然 @yushijinhun 同时也提供了一套他自己开发的 Yggdrasil API 后端实现,但是说实话那个太 简 陋 了,远远达不到实际生产应用的标准(只有一套 RESTful API,没有前端界面,也只有基础功能),所以我相信大部分同学想要在服务器上部署 authlib-injector 的时候还是有些顾虑的。

那么现在,终于到了我发这个帖子的目的所在了。


====== 又是一个神秘的分鸽线 ========

★ 实现效果

不知道现在正在阅读此贴的各位有没有听说过 Blessing Skin 这个皮肤站程序呢?

如果有,那事情就好说了。虽然重头开发一套 Yggdrasil API 的杂七杂八系统很够呛,但是幸运的是,我之前一直有在维护 Blessing Skin 这个皮肤站程序,并且在 v3 版本后,皮肤站全面支持的「单用户多角色」功能,再加上皮肤站本身就很完善的角色管理、皮肤上传与分享、后台管理等等功能,这也就意味着,我们可以直接使用皮肤站的用户系统,在此基础上实现一个第三方的 Yggdrasil API。

更幸运的是,今年初的时候我给 Blessing Skin 加上了【插件系统】(v3.2+),这也就意味着,我可以在完全不修改皮肤站现有源代码的情况下,以【插件】的形式提供一个 Yggdrasil API 服务。

废话不多说,先看效果:



▲在皮肤站「角色管理」中可添加多个角色



▲使用皮肤站的邮箱与密码登录后,配合 HMCL 实现多角色选择



▲游戏内的显示效果,无需皮肤 Mod 即可加载皮肤站中设定好的皮肤 & 披风,甚至能够实现原本只有正版登录才能实现的 TAB 栏头像显示哦


====== 双是一个神秘的分鸽线 ========

★ 部署方法

看到上面的截图有没有心动呢?

这里是具体部署方法(打不开的话还请自行解决):

https://github.com/printempw/yggdrasil-api/wiki

看起来很麻烦,是吗?

但是如果你耐心部署完后,你就能得到以下功能:

  • 一个完善的账号系统(配合数据对接插件还能与 Discuz 等论坛账号互通),包括友好的注册、登录网页界面以及强大的管理员面板,在管理后台中封禁用户后,该用户也将无法登录游戏;
  • 一个皮肤管理系统,自带皮肤库功能,在皮肤站中应用的皮肤,玩家无需安装任何皮肤 Mod,进入游戏即可看到自己设置的皮肤(支持双层皮肤、支持 Alex 模型,由于游戏本身限制不支持高清皮肤);
  • 单账户多角色功能,玩家可以像登录正版那样用「邮箱」和「密码」登录游戏,而且如果你在皮肤站中添加了多个角色的话,还可以在启动页面选择要用哪个角色进入游戏(Yggdrasil API 实现了这个功能,但是 Mojang 的正版登录服务器并未实现该功能),HMCL 等启动器都实现了本功能;
  • 你还可以修改那些流行的开源启动器源码(大牌启动器一般都支持这种方法),搞一个「xx 服务器专属启动器」;)


你觉得如何呢?


====== 叒是一个神秘的分鸽线 ========

★ 一些技术细节的小提示

  • 因为这是直接替换 Mojang 官方的 Yggdrasil API 地址,所以某些自己写启动器的仁兄,直接把那些 https://authserver.mojang.com 开头的那些 API 地址替换成 {你的皮肤站地址}/api/yggdrasil/authserver 就 OK 了;
  • 不是自己写启动器的同学,可以写一个 BAT 批处理,里面写上 java -javaagent:<path>={api_root} -jar HMCL.jar,就可以直接一键 hook 并打开 HMCL 这类基于 JVM 的启动器了(前提是你要在客户端里打包一个跨平台版的 HMCL.jar);


如果你也想自己实现一个 Yggdrasil API,我写了一篇 博客文章,记录了一下自己实现 Yggdrasil API 时可能遇到的坑,希望会对你有所帮助。


====== 叕是一个神秘的分鸽线 ========

★ 后记

这种解决方案还是比较高端的,部署起来也比较复杂,比较适合中大型服务器使用,十几个人玩玩的服务器还是不要折腾了(当然,你愿意折腾我也是很高兴的)。

因此,我希望你决定部署这套系统之前有一定的问题解决能力。我是不会回答任何「怎么安装」「怎么部署」之类笼统的问题的,毕竟我的时间也不多,见谅 ;)

如果关于本帖中描述的方案有什么想要探讨的,可以发送邮件至 <h#prinzeugen.net>,或者加入 QQ 群 <573741451> 讨论,我是不经常看 MCBBS 的回复的。

最后,再次感谢 @yushijinhun,正是他的 authlib-injector 项目让这一切成为可能,鼓掌!


来自群组: Blessing Skin

评分

参与人数 10人气 +18 金粒 +183 收起 理由
1257375501 + 2 MCBBS有你更精彩~
Ling_Haner + 2 + 40 MCBBS有你更精彩~
gooding300 + 3 + 25 MCBBS有你更精彩~
nikoniko_ni + 2 MCBBS有你更精彩~
tnqzh123 + 2 + 30 MCBBS有你更精彩~
122474363 + 1 如何把AuthMe的UUID转成Yggdrasil API的UID.
wwwer + 1 + 15 MCBBS有你更精彩~
深海鲸鱼座 + 2 + 35 MCBBS有你更精彩~
2692611232 + 1 + 3 MCBBS有你更精彩~
tallmoon + 2 + 35 支持楼主的分享!太感谢了!

查看全部评分

kkll6 当前离线
帖子
主题
精华
贡献
最后登录
1970-1-1
爱心
积分
96
钻石
性别
保密
注册时间
2020-2-2
查看详细资料
发表于 2020-2-25 23:39:16 | 显示全部楼层
本帖最后由 kkll6 于 2020-2-26 16:44 编辑

赞美大佬,我成功用这个进入了ATLauncher玩到了TNFC
2020.2.26更新: 成功通过控制台启动ATLuancher,添加皮肤站账号也成功了,但是有报错日志启动命令:
java -javaagent:authlib-injector-1.1.26-41a7a47.jar=https://skin.prinzeugen.net/api/yggdrasil -jar ATLauncher.exe

控制台启动ATLauncher日志.txt

3.39 KB, 下载次数: 0

回复

使用道具 举报

wenzihe 当前离线
帖子
主题
精华
贡献
最后登录
1970-1-1
爱心
积分
79
钻石
性别
保密
注册时间
2019-4-14
查看详细资料
发表于 2020-2-25 14:54:14 | 显示全部楼层
能进hypixel吗?
回复

使用道具 举报

失心疯. 当前离线
帖子
主题
精华
贡献
最后登录
1970-1-1
爱心
积分
851
钻石
性别
保密
注册时间
2018-4-5
查看详细资料
发表于 2020-2-9 15:28:35 | 显示全部楼层
千言万语汇成牛逼两字
回复

使用道具 举报

m00nfly 当前离线
帖子
主题
精华
贡献
最后登录
1970-1-1
爱心
积分
111
钻石
性别
保密
注册时间
2020-1-29
查看详细资料
发表于 2020-2-1 11:07:13 来自手机 | 显示全部楼层
我一直在寻找的解决方案,终于找到了,GitHub 立即关注一波
回复

使用道具 举报

晓夜Port 当前离线
帖子
主题
精华
贡献
最后登录
1970-1-1
爱心
积分
7987
钻石
性别
保密
注册时间
2015-10-19
查看详细资料
发表于 2020-2-1 09:04:24 | 显示全部楼层
  1. online_mdoe=false
复制代码


应是 online_mode=false
回复

使用道具 举报

TheOldDown 当前离线
帖子
主题
精华
贡献
最后登录
1970-1-1
爱心
积分
215
钻石
性别
保密
注册时间
2020-1-4
查看详细资料
发表于 2020-1-27 10:54:28 | 显示全部楼层
很好啊,是个好主意诶
回复

使用道具 举报

2425701120 当前离线
帖子
主题
精华
贡献
最后登录
1970-1-1
爱心
积分
168
钻石
性别
保密
注册时间
2016-12-22
查看详细资料
发表于 2019-5-8 18:06:04 | 显示全部楼层
666666666666
回复

使用道具 举报

djjawdjawhd 当前离线
帖子
主题
精华
贡献
最后登录
1970-1-1
爱心
积分
809
钻石
性别
保密
注册时间
2018-4-29
查看详细资料
发表于 2019-5-6 22:31:58 | 显示全部楼层
z1252583957 发表于 2017-11-19 22:03
遇到一个很棘手的问题想请教一下楼主,按照上面的方式实现了外置登录,但现在服务器里只能存在一名玩家在线 ...

你是不是用的Sakura_frp映射软件或其他映射软件开的服 才会的把
回复

使用道具 举报

zycdojar 当前离线
帖子
主题
精华
贡献
最后登录
1970-1-1
爱心
积分
1030
钻石
性别
保密
注册时间
2017-9-15
查看详细资料
发表于 2019-3-3 21:40:57 来自手机 | 显示全部楼层
可是在低版本貌似没实现加载皮肤
我在高版本看到了皮肤,可低版本没有
回复

使用道具 举报

s1s2ss3456 当前离线
帖子
主题
精华
贡献
最后登录
1970-1-1
爱心
积分
506
钻石
性别
保密
注册时间
2015-4-12
查看详细资料
发表于 2018-11-5 16:39:53 来自手机 | 显示全部楼层
看不懂。。有点
回复

使用道具 举报

ーのものー 当前离线
帖子
主题
精华
贡献
最后登录
1970-1-1
爱心
积分
2095
钻石
性别
保密
注册时间
2014-7-1
查看详细资料
 楼主| 发表于 2018-11-4 21:37:07 | 显示全部楼层
@TGL 发表于 2018-11-4 17:38
站点配置里的强制SSL开启后网站进不去了怎么办。。

去皮肤站数据库的 options 表,手动将 force_ssl 配置项的值修改为 false 即可。
回复

使用道具 举报

@TGL 当前离线
帖子
主题
精华
贡献
最后登录
1970-1-1
爱心
积分
2692
钻石
性别
保密
注册时间
2016-4-30
查看详细资料
发表于 2018-11-4 17:38:20 | 显示全部楼层
站点配置里的强制SSL开启后网站进不去了怎么办。。
回复

使用道具 举报

LoeGamingJoker 当前离线
帖子
主题
精华
贡献
最后登录
1970-1-1
爱心
积分
2111
钻石
性别
保密
注册时间
2017-5-16
查看详细资料
发表于 2018-8-23 22:10:51 | 显示全部楼层
很详细的教程
回复

使用道具 举报

a1771336151 当前离线
帖子
主题
精华
贡献
最后登录
1970-1-1
爱心
积分
711
钻石
性别
保密
注册时间
2015-9-29
查看详细资料
发表于 2018-5-18 00:16:31 | 显示全部楼层
早就搭建好了 很好用哦
回复

使用道具 举报

dongyun9881 当前离线
帖子
主题
精华
贡献
最后登录
1970-1-1
爱心
积分
1489
钻石
性别
保密
注册时间
2017-7-8
查看详细资料
发表于 2018-5-13 18:10:23 | 显示全部楼层
为什么我登录提示无法连接到服务器?  
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册(register)

本版积分规则

Archiver|小黑屋|Mcbbs.net ( 京ICP备15023768号-1 ) | 京公网安备 11010502037624号 | 手机版

GMT+8, 2020-3-30 20:40 , Processed in 0.081584 second(s), Total 25, Slave 24 queries, Release: Build.2020.01.19.1840, Gzip On, MemCached On.

"Minecraft"以及"我的世界"为Mojang Synergies AB的商标 本站与Mojang以及微软公司没有从属关系

© 2010-2020 我的世界中文论坛 版权所有 本站原创图文内容版权属于原创作者,未经许可不得转载

快速回复 返回顶部 返回列表