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

[错误报告] 关于用littleskin皮肤站无法加入服务器显示“登陆错误:无效会话” #55

Closed
2 tasks done
DomnickJYH opened this issue Jul 18, 2022 · 2 comments

Comments

@DomnickJYH
Copy link

DomnickJYH commented Jul 18, 2022

BUG描述

我使用MultiLogin v0.3.15插件加入1.18.2Spigot服务器,同时加入了CatSeedLogin-1.4.0和ProtocolLib插件,想要实现在同一个服务器中正版用户和外置登录(littleskin)用户共存并可互相看见对方的皮肤。在按照示例填写关于littleskin各参数并按照提示打开服务器正版验证后,使用外置登录(littleskin)进入此服务器,提示“登陆错误:无效会话”即因无法通过正版验证而被拒绝进入服务器,导致问题产生。希望您尽快解决并给予答复和解决方案。

MultiLogin版本

MultiLogin v0.3.15

系统架构

windows/amd64

配置文件

###################################

MultiLogin

--config

###################################

在这里,设置所有的 Yggdrasil 账户验证服务器。

services:

这是一个示例配置:

节点名称 'demo' 作为混合验证系统区分 Yggdrasil 验证服务器唯一性的凭据,设置好后请不要随意的去改动它,

随意的更改节点名称将会导致二次验证系统无法验明用户身份而拒绝用户的登入请求。

可以仿写此节点用来添加新的 Yggdrasil 账户验证服务器。

demo:

# 启用该验证服务器。
# 值为 'false' 时将不添加该 Yggdrasil 账户验证服务器到混合登入系统中去,将拒绝一切使用该 Yggdrasil 账户验证服务器的玩家登入游戏。
# 默认值 'true'
enable: true

# 该账户验证服务器中的别称。
# 不用于父节点名称,此节点的值可以随意修改。
# 必填值,在 Bukkit 服务端中作为变量传递。
name: "Demo Yggdrasil"

# Yggdrasil 账户验证服务器的基本属性和信息设置。
body:

  # Yggdrasil 账户验证服务器服务端 hasJoined 阶段部分验证请求链接设置。
  # 此节点必须指定完整的请求链接。
  # 其中 GET 请求中的占位变量 {username} 表示 username,占位变量 {serverId} 表示 serverId,
  #        占位变量 {passIpContent} 表示 passIpContent 节点所设置的内容。
  # 请求的 URL 对大小写敏感,设置需谨慎!
  # 一些例子:
  #      GET: "https://example.com/session/minecraft/hasJoined?username={username}&serverId={serverId}{passIpContent}"
  #      GET: "https://example.com/session/minecraft/hasJoined?username={username}&serverId={serverId}"
  #      POST: "https://example.com/session/minecraft/hasJoined"
  # 必填值
  url: "https://littleskin.cn/api/yggdrasil/session/minecraft/hasJoined?username={username}&serverId={serverId}{passIpContent}"

  # hasJoined 阶段使用 POST 请求的方式验证账户身份。
  # 绝大多数下, Yggdrasil 账户验证服务器 hasJoined 阶段都采用 GET 请求方式验证用户数据的,
  # 如果你不了解当前 Yggdrasil 验证流程的话,请勿擅自改动它。
  # 默认值 'false'
  postMode: false

  # hasJoined 阶段是否向 Yggdrasil 账户验证服务器传递用户 IP 信息,如果存在。
  # 默认值 'false'
  passIp: false

  # 设置 url 节点 {passIpContent} 变量内容,
  # 其中,变量 {ip} 为所获取到的 IP 信息。
  # 仅当 passIp 节点为 true 时此节点有效。
  # 请求的 URL 对大小写敏感,设置需谨慎!
  # 请留意字符串拼接的特殊值 '&' 和 ', '
  # 一些例子:
  #      GET: '&ip={ip}'
  #      POST: ', "ip":"{ip}"'
  # 默认值 '&ip={ip}'
  passIpContent: "&ip={ip}"

  # 设置 post 的请求内容。
  # 其中 POST 请求中的占位变量 {username} 表示 username,占位变量 {serverId} 表示 serverId,
  #        占位变量 {passIpContent} 表示 passIpContent 节点所设置的内容。
  # 请求的 URL 对大小写敏感,设置需谨慎!
  # 一些例子:
  #        '{"username":"{username}", "serverId":"{serverId}"{passIpContent}}'
  #        '{"username":"{username}", "serverId":"{serverId}"}'
  # 默认值 '{"username":"{username}", "serverId":"{serverId}"}'
  postContent: '{"username":"{username}", "serverId":"{serverId}"}'

# 设置玩家首次登入后游戏内的 UUID 生成规则
# 目前只支持以下值:
#   DEFAULT   - 使用 Yggdrasil 账户证服务器提供的在线 UUID
#   OFFLINE   - 自动生成离线 UUID
#   RANDOM    - 随机 UUID
# 请谨慎设置和修改此节点,避免增加日后维护的心智负担。
# 为避免触发 Paper 端的某些机制,强烈建议此值为 DEFAULT
# 默认值 'DEFAULT'
convUuid: DEFAULT

# 当玩家首次登入时分配到的 UUID 已被使用,自动更正到随机的 UUID。
# 请尽量保持此值为 true ,除非您了解后果是什么。
# 默认值 'true'
convRepeat: true

# 玩家允许设置的用户名正则。
# 若不匹配将会拒绝当前玩家的登入请求
# 如果此值留空或未设置,则应用根节点下 'nameAllowedRegular' 节点值。
# 默认值 ''
nameAllowedRegular: ''

# 是否为当前验证服务器单独开启白名单。
# 当全局白名单为 true 时,此节点强制为 true。
# 默认值: false
whitelist: false

# 设置占线登入机制,登入时游戏内存在有相同游戏内 UUID 的玩家时
# 若为 false 将把游戏内玩家踢出,允许验证中的玩家登入(原版默认)
# 若为 true 则拒绝当前的登入请求
# 默认值: false
refuseRepeatedLogin: false

# 验证错误重试次数
# 默认值: 1
authRetry: 10

# 皮肤修复规则,用来解决不同 Yggdrasil 账户验证服务器下的皮肤不可见问题。
#    比如使用 Minecraft 原版验证服务器的玩家无法看到使用第三方外置验证登入玩家的皮肤。
# 目前只支持设置以下值:
#   OFF       - 关闭这个功能
#   LOGIN     - 占用登入时间进行皮肤修复操作(修复时间过长会导致登入超时)
#   ASYNC     - 登入后修复(修复成功后需要重新连接服务器)
# 系统将会自动过滤掉皮肤源域名为 '*.minecraft.net' 的情况
# 皮肤修复服务器来自 'mineskin.org'
# 默认值 'OFF'
skinRestorer: LOGIN

# 皮肤修复错误重试次数
# 默认值: 2
skinRestorerRetry: 5

此节点代表 Minecraft 原版验证

official:
name: "正版"
body:
url: "https://sessionserver.mojang.com/session/minecraft/hasJoined?username={username}&serverId={serverId}{passIpContent}"

设置所有网络请求的超时时间

默认值 '10000'

servicesTimeOut: 10000

全局白名单开关

默认值 'true'

whitelist: false

玩家允许设置的用户名正则,不匹配将会拒绝登入请求。

当当前 Yggdrasil 账户验证服务器设置中对应设置节点存在值时,此节点对于该验证服务器无效。

默认值 '^[0-9a-zA-Z_]{1,16}$'

nameAllowedRegular: '^[0-9a-zA-Z_]{1,16}$'

插件数据的存放方式

sql:

数据库类型设置

目前至支持以下值:

H2

MYSQL

默认值 'H2'

backend: H2

数据库地址

默认值 '127.0.0.1'

ip: '127.0.0.1'

数据库端口

默认值 '3306'

port: 3306

数据库用户名

默认值 'root'

username: 'root'

数据库密码

默认值 '12345'

password: '12345'

数据库名称

默认值 'multilogin'

database: 'multilogin'

前缀

默认值 'multilogin'

prefix: 'multilogin'

日志

[10:45:34] [Server thread/INFO]: [MultiLogin] Enabling MultiLogin v0.3.15
[10:45:34] [Server thread/INFO]: [MultiLogin] 加载文件: config.yml
[10:45:34] [Server thread/INFO]: [MultiLogin] 添加 Yggdrasil 账户验证服务器 Demo Yggdrasil(demo)。
[10:45:34] [Server thread/INFO]: [MultiLogin] 添加 Yggdrasil 账户验证服务器 正版(official)。
[10:45:34] [Server thread/INFO]: [MultiLogin] 成功连接到 H2 数据库
[10:45:35] [Server thread/INFO]: [MultiLogin] 插件加载完毕
[10:45:35] [Server thread/INFO]: [CatSeedLogin] Enabling CatSeedLogin v1.4.0-SNAPSHOT
[10:45:35] [Server thread/INFO]: Server permissions file permissions.yml is empty, ignoring it
[10:45:35] [Server thread/INFO]: Done (8.834s)! For help, type "help"
[10:45:35] [Craft Scheduler Thread - 0/INFO]: [CatSeedLogin] 缓存加载 3 个数据
[10:46:45] [Server thread/INFO]: com.mojang.authlib.GameProfile@342d863b[id=,name=Domnick_JYH,properties={},legacy=false] (/127.0.0.1:59158) lost connection: Disconnected

复现步骤

...

确认一遍

  • 我已完成且认真地填写完了报告所需要的信息
  • 我确保没有重复的报告 (搜索一下)
@Becods
Copy link
Collaborator

Becods commented Jul 18, 2022

#17

基于分析 yggdrasil 机制,服务器验证失败的前提是客户端验证成功。这不是我们能控制得了的。有关于混合验证登入插入离线登入,这样做风险太大。

你仍然可配合FastLogin和Authlib-injector做到类似的效果(不推荐),MultiLogin不提供相关功能支持。

@CaaMoe CaaMoe closed this as not planned Won't fix, can't repro, duplicate, stale Jul 18, 2022
@IPF-Sinon
Copy link

玩家使用第三方启动器启动游戏后自动加入服务器似乎能绕开此问题1.16.5

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

No branches or pull requests

4 participants