Определение лицензионных аккаунтов
Как Premium решает, кто владеет лицензионным аккаунтом, и как избавить офлайн-игроков от неудачного входа.
Игрока, которого Premium считает владельцем лицензионного аккаунта с его ником, просят войти через лицензионный аккаунт: сразу при подключении, если провайдера выбирает Identica, или когда он выбирает Premium, если choice регистрации — PROMPTED; тогда Premium предлагается только таким игрокам. Все остальные игроки переходят к следующему провайдеру, например Credential.
Ники, уже привязанные к аккаунту, подчиняются этому аккаунту: ник, привязанный к Premium, всегда требует входа через лицензионный аккаунт, а ник, привязанный к другому провайдеру, — никогда. Для остальных решает определение.
Методы
detection.methods в providers/Premium/settings.yml перечисляет методы, которые Premium пробует сверху вниз. Метод либо принимает решение, либо передаёт игрока следующему методу. Игрок, о котором не принял решения ни один метод, считается нелицензионным.
detection:
methods:
- CLIENT_PROFILE
- LOOKUPLOOKUPсчитает лицензионным каждый ник, у которого есть лицензионный профиль в Mojang. Этот метод всегда принимает решение, поэтому методы после него никогда не проверяются; в таком случае Premium пишет предупреждение при запуске.CLIENT_PROFILEЭкспериментально сравнивает идентификатор профиля, который клиент отправляет при подключении, с лицензионным профилем его ника. Официальный лаунчер отправляет идентификатор аккаунта, в который он вошёл, а пиратские (офлайн) лаунчеры — другой. Совпадение означает лицензионного игрока, другой идентификатор — нелицензионного. Клиенты старше 1.19.1 не отправляют идентификатор и передаются следующему методу.
methods | Клиент 1.19.1 или новее | Более старый клиент |
|---|---|---|
["LOOKUP"] (по умолчанию) | ник лицензионного аккаунта: просят войти через лицензионный аккаунт | то же |
["CLIENT_PROFILE", "LOOKUP"] | просят войти через лицензионный аккаунт, только если клиент отправляет лицензионный профиль | ник лицензионного аккаунта: просят войти через лицензионный аккаунт |
["CLIENT_PROFILE"] | просят войти через лицензионный аккаунт, только если клиент отправляет лицензионный профиль | считается нелицензионным |
Офлайн-игроки с ником лицензионного аккаунта
Если указан только LOOKUP, офлайн-игрока с ником лицензионного аккаунта при первом входе просят войти через лицензионный аккаунт. Его клиент не может этого сделать и отключается с сообщением о недействительной сессии; следующий вход с того же адреса в течение attemptTtl переходит к следующему провайдеру, если только ник за это время не привязали к Premium.
Если CLIENT_PROFILE стоит первым, такой игрок переходит к следующему провайдеру уже при первом входе, а регистрация, в которой выбирает игрок, не предлагает ему Premium.
CLIENT_PROFILE также защищает ники, привязанные к Premium: клиенту, который отправляет идентификатор профиля, отличный от привязанного, отказывают во входе с сообщением verification.ownedUsername из messages.yml провайдера Premium — если только ник теперь не принадлежит профилю, который отправил этот клиент.
Клиент отправляет идентификатор профиля сам, поэтому CLIENT_PROFILE решает только одно: просить ли вход через лицензионный аккаунт. Сам вход через лицензионный аккаунт по-прежнему проверяется через Mojang.
На BungeeCord Identica читает идентификатор профиля из запроса на вход BungeeCord. В сборке BungeeCord, которая его не сохраняет, каждый клиент считается клиентом старше 1.19.1.
Ники, перешедшие к другому аккаунту
Результаты поиска кэшируются на lookup.cacheTtl, по умолчанию на пять минут. Ник, который за это время перешёл к другому лицензионному аккаунту, может сравниваться со старым профилем. recheckOnMismatch: true повторно ищет несовпавший ник, прежде чем признать игрока нелицензионным, ценой одного дополнительного запроса для каждого офлайн-игрока с ником лицензионного аккаунта.
Когда Mojang недоступен
Если поиск завершился ошибкой или длился дольше lookup.timeout (по умолчанию три секунды), считается, что у ника нет лицензионного профиля, и такой ответ не кэшируется. Игроки с никами лицензионных аккаунтов тогда переходят к следующему провайдеру, пока Mojang снова не начнёт отвечать; аккаунтам, уже привязанным к Premium, вход через лицензионный аккаунт по-прежнему нужен.
Все настройки описаны на странице Настройки.
