authlib-injector icon indicating copy to clipboard operation
authlib-injector copied to clipboard

部分细节与Mojang的Yggdrasil实现不符

Open xfl03 opened this issue 6 years ago • 5 comments

1.未在文档中规定 Username ->UUID API

Resolved

2.~~UUID->Profile API中存在导致NPE的定义~~(edited by @yushijinhun: solved)

properties及signature项目在无特殊说明的情况下不需要包含。

实际上,若是 properties 被省略,则会在

com.mojang.authlib.yggdrasil.YggdrasilMinecraftSessionService.fillGameProfile(YggdrasilMinecraftSessionService.java:187)

发生NPE,完整的日志如下

java.lang.NullPointerException
com.google.common.collect.AbstractMultimap.putAll(AbstractMultimap.java:95)
com.google.common.collect.LinkedHashMultimap.putAll(LinkedHashMultimap.java:86)
com.google.common.collect.ForwardingMultimap.putAll(ForwardingMultimap.java:110)
com.mojang.authlib.yggdrasil.YggdrasilMinecraftSessionService.fillGameProfile(YggdrasilMinecraftSessionService.java:187)
com.mojang.authlib.yggdrasil.YggdrasilMinecraftSessionService$1.load(YggdrasilMinecraftSessionService.java:60)
com.mojang.authlib.yggdrasil.YggdrasilMinecraftSessionService$1.load(YggdrasilMinecraftSessionService.java:57)
com.google.common.cache.LocalCache$LoadingValueReference.loadFuture(LocalCache.java:3716)
com.google.common.cache.LocalCache$Segment.loadSync(LocalCache.java:2424)
com.google.common.cache.LocalCache$Segment.lockedGetOrLoad(LocalCache.java:2298)
com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2211)
com.google.common.cache.LocalCache.get(LocalCache.java:4154)
com.google.common.cache.LocalCache.getOrLoad(LocalCache.java:4158)
com.google.common.cache.LocalCache$LocalLoadingCache.get(LocalCache.java:5147)
com.google.common.cache.LocalCache$LocalLoadingCache.getUnchecked(LocalCache.java:5153)
com.mojang.authlib.yggdrasil.YggdrasilMinecraftSessionService.fillProfileProperties(YggdrasilMinecraftSessionService.java:170)
customskinloader.loader.MojangAPILoader.loadProfile(MojangAPILoader.java:46)
customskinloader.CustomSkinLoader.loadProfile0(CustomSkinLoader.java:105)
customskinloader.CustomSkinLoader.loadProfile(CustomSkinLoader.java:77)
customskinloader.fake.FakeSkinManager$1.run(FakeSkinManager.java:61)
java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
java.util.concurrent.FutureTask.run(Unknown Source)
java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
java.lang.Thread.run(Unknown Source)

望您能在百忙之中抽出时间进行修改,麻烦您了

xfl03 avatar Feb 10 '18 19:02 xfl03

1.未在文档中规定 Username ->UUID API

虽然Mojang实现了该API,但authlib中却并没有使用到这个API。并且常见的启动器、服务端,如HMCL、Spigot,也并未使用到该API。

我在GitHub上搜索了这段API的URL,发现使用并不是很多。事实上,我到目前为之还没有碰到过使用它的mod或插件。但既然Mojang有这个API,mod或插件就还是有可能去调用它的。

我打算将其写入文档。但在未发现调用这个API的启动器、服务端、mod或插件前,我会赋予它一个较低的优先级。你觉得如何?

yushijinhun avatar Feb 11 '18 01:02 yushijinhun

2.UUID->Profile API中存在导致NPE的定义

从你的堆栈跟踪可以看出,authlib调用的是/sessionserver/session/minecraft/profile/:uuid这个API。其文档中已有说明:

响应格式:

{
  // ... 角色信息(包含角色属性。若unsigned为true,还需要包含数字签名。格式见 §角色信息的序列化)
}

可能我的描述有歧义,包含角色属性指的就是包含properties。

yushijinhun avatar Feb 11 '18 02:02 yushijinhun

  1. 1K结果虽然的确算不上“很多”,不过CustomSkinLoader确确实实调用了这个接口,还请您理解

我打算将其写入文档。但在未发现调用这个API的启动器、服务端、mod或插件前,我会赋予它一个较低的优先级。

不过还是非常感谢您做出的这个决定

Resolved
  1. 的确是这个API,如果修改成这样不知道会不会更合适一点

properties及signature项目包含与否取决于具体API中的定义。

xfl03 avatar Feb 11 '18 03:02 xfl03

我发现一个使用 Username -> UUID at time API 的 Mod: SkinsRestorer

I found that SkinsRestorer is using Username -> UUID at time API.

yushijinhun avatar Feb 14 '19 08:02 yushijinhun

@Karlatemp 十分抱歉,我撤回了你在 wiki 上 Change ```javascript to ```json5, Add GET https://api.mojang.com/users/profiles/minecraft/<username>?at=<timestamp> GET https://api.mojang.com/user/profiles/<uuid>/names 这个提交。

对于将 javascript 改为 json5 我十分感谢,但因为这和另外两项变更合在了一个提交内,因此我只能全部撤回。您新增的两个 API,是属于对规范的较大变动,而不是对错误的修正,因此必须在讨论并达成一致之后再实施,希望您见谅。此 issue 应该与您的问题主题相符,所以希望您可以在这里表达看法、提出建议等等。

这两个 API 确实是 Mojang 提供的,但是因为使用极少,因此规范一开始并没有把它们纳入。 @xfl03 对此提出了问题,但因为没有遇到由此造成的问题,所以 issue 被搁置至今。

如果要新增 API 的话,需要对 Mojang 的 API 实现进行仔细测试并且推断其逻辑,然后再加进规范。同时,一般还需要在 yggdrasil-mock 中做出一个参考实现。除此之外,可能还需要听取 BS 开发者的建议,看看他们在实现的时候会不会遇到什么问题,有什么意见。

yushijinhun avatar Apr 12 '20 16:04 yushijinhun