Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[proposal] API 地址指示(ALI) #18

Closed
yushijinhun opened this issue Oct 5, 2018 · 0 comments
Closed

[proposal] API 地址指示(ALI) #18

yushijinhun opened this issue Oct 5, 2018 · 0 comments

Comments

@yushijinhun
Copy link
Owner

概述

目前,用户配置 authlib-injector 时,需要输入完整的 Yggdrasil API 地址,这是十分麻烦的。尽管通过 DnD 方式添加 Yggdrasil 服务端可以避免输入 API 地址,但此功能的使用率并不高。

此提案规定了一个 HTTP 响应头字段 X-Authlib-Injector-API-Location,其被称为 API 地址指示(API Location Indication,简称 ALI)。ALI 的值可以是相对 URL(如 /api/yggdrasil/),也可以是绝对 URL(如 https://skin.example.com/api/yggdrasil/),它指向与当前页面相关联的 Yggdrasil API 地址。

对启动器的改动

当用户添加某个 URL 为 Yggdrasil 服务器时,启动器向此 URL 发送 GET 请求。不论 HTTP 状态码是多少,如果响应中包含 ALI,则启动器重定向到其所指的 URL。这样的重定向允许进行多次,但必须有次数上限。在这里规定这个上限为 5 次。

如果 ALI 指向其自身(比较时除去末尾/),则该 ALI 应当被忽略,当前 URL 即为 API 地址。

需要注意的是,ALI 仅用于确定 Yggdrasil API 地址,即仅在添加 Yggdrasil 服务器时被考虑。一旦 Yggdrasil 服务器被添加,其 API 地址就不再发生改变,无论服务器的后续响应中是否包含 ALI。此外,启动器应当显示真正的 API 地址,而不是重定向之前的。

对 authlib-injector 的改动

当 authlib-injector 运行在 MC 服务端上时,其支持 ALI,实现方式与启动器相同;当 authlib-injector 运行在 MC 客户端上时,其不支持 ALI(这里认为启动器已经处理过 ALI,传入的 API 地址即为真正的 API 地址)。

判断运行环境是客户端还是服务端的方法,见 #16

例子

如果 #16#17 及本提案可以被实现,那么就会有以下效果:

假定 https://example.com/ 是一个皮肤站,其 Yggdrasil API 地址为 https://skin.example.com/api/yggdrasil。页面 https://example.com/ 使用了 ALI。

  • 配置启动器时,仅需要输入 example.com
  • 配置服务端时,仅需要添加参数 -javaagent:authlib-injector.jar=example.com

欢迎诸位就本提案提出意见。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant