Документация · 04
Онлайн-пропуска на выделенных серверах
Позвольте выделенному серверу за несколько микросекунд и без обращения в сеть узнать, какой аккаунт Gameway подключается, без пароля и запроса.
4 минуты чтенияОбновлено 4 окт. 2026
Разделы документации
Онлайн-пропуска уже работают целиком: приложение выдаёт их, SDK передаёт их вашему серверу, а сервер проверяет их ключами ниже. Имена — те, что есть в пакете SDK сегодня; что изменилось, смотрите в списке изменений полученной версии.
Что такое пропуск
Когда игрок запускает вашу игру из Gameway, игра может попросить у платформы пропуск запуска для одного адреса сервера. Пропуск — маленький подписанный токен с именем игрока, приложения и сервера. Игра игрока отправляет его в запросе на подключение, а ваш сервер проверяет подпись открытым ключом, который у него уже есть. Обращаться в Gameway не нужно, а пропуск для другой игры, другого сервера или чужого адреса не пройдёт проверку.
Можно также потребовать подтверждать каждый пропуск онлайн, один раз: тогда его нельзя повторить даже в течение его короткой жизни.
Зарегистрируйте сервер
У каждого выделенного сервера есть номер, к которому привязан пропуск, и список адресов, на которые подключаются игроки.
gw server create <app> --name eu-1 --endpoint 203.0.113.5:27777Команда печатает номер сервера и секретный ключ, начинающийся с gws_. Ключ показывается один раз: положите его в окружение сервера и больше никуда. gw server rotate-key <app> <serverId> --yes выдаёт новый и отзывает старый.
Пропуск действует только для зарегистрированного адреса. За NAT или балансировщиком регистрируйте тот адрес, на который игроки подключаются на самом деле.
Включайте плавно
Серверы работают как раньше, пока вы сами не включите проверку. Режим задаётся переменными окружения:
| Переменная | Значения | По умолчанию |
|---|---|---|
GAMEWAY_TICKETS | off, optional, required | off |
GAMEWAY_TICKETS_ONLINE | off, best_effort, required | off |
GAMEWAY_APP_ID | номер вашего приложения | обязательна, кроме off |
GAMEWAY_SERVER_ID | номер из server create | не задана: принимаются пропуска для любого сервера |
GAMEWAY_PUBLIC_ENDPOINTS | адреса ip:port через запятую, на которые подключаются игроки | не задана: игра может подставить свои |
GAMEWAY_SERVER_KEY | ключ gws_, только для онлайн-подтверждения | не задан |
GAMEWAY_API | адрес API для обновления открытых ключей и онлайн-подтверждения | не задан |
GAMEWAY_KEYRING_FILE | файл для кэша подписанных открытых ключей | не задан |
| Ситуация | `off` | `optional` | `required` |
|---|---|---|---|
| Пропуска нет | пустить, как раньше | пустить как анонима | отклонить |
| Недействительный пропуск | игнорируется | пустить как анонима, но не как заявленного игрока | отклонить с причиной |
| Действительный пропуск | игнорируется | пустить как этого игрока | пустить как этого игрока |
Начните с optional: пока игроки обновляются, никого не заблокируют, а в журналах будет видно, сколько подключений приходит с действительным пропуском. Когда их почти все, переходите на required.
Онлайн-подтверждение требует, чтобы сервер мог достучаться до Gameway по HTTPS. В контейнере установите сертификаты центров сертификации.
Проверка пропуска на сервере
Для этого в пакете Unity есть GamewayServer. Те же проверки есть в виде библиотеки на C (gw_srv_*) для серверов, сделанных не на Unity.
using Gameway.Sdk;
using Gameway.Sdk.Server;
static class PassCheck
{
static GamewayServer server;
public static void Start()
{
// reads the GAMEWAY_* variables below; "off" (the default) changes nothing
var r = GamewayServer.InitFromEnvironment("203.0.113.5:27777", out server);
if (r.IsError()) UnityEngine.Debug.LogError("Gameway server: " + r.CodeName());
}
// in your connection approval, with the ticket text the client put in its connect payload
public static GwResult Check(string peerIp, string ticketText, out GwTicketInfo info)
{
info = default;
var t = server.Throttle(peerIp); // keep floods away from the signature check
if (t.IsError()) return t;
return server.VerifyBase64Url(ticketText, out info); // checked offline, thread-safe
}
}- При старте
InitFromEnvironmentчитает переменные. Неверное значение, отсутствие номера приложения или режимrequiredбез адресов, адреса API или свежих ключей — это результат с ошибкой: исправьте до приёма игроков. - Для каждого подключения сначала
Throttle(peerIp), затемVerifyилиVerifyBase64Url. Успешный результат содержит номер игрока и отображаемое имя, если игрок это разрешил. - При включённом онлайн-подтверждении вызовите
BeginRedeem(ticket), оставьте подключение в ожидании и опрашивайтеPollEvent, пока не придёт ответ. Уже использованный пропуск или пропуск заблокированного игрока отклоняется. - Связь
clientIdсuserIdхраните сами и решите, что делает второй вход того же игрока. Не доверяйте номеру игрока из любого источника, кроме проверенного пропуска.
Почему пропуск не проходит
| Код | Значение |
|---|---|
TicketMissing | В подключении не было пропуска. |
TicketMalformed, TicketBadSignature, TicketUnknownKid | Текст повреждён, не подписан платформой или подписан ключом, которого сервер не знает. Обновите ключи. |
TicketExpired, TicketNotYetValid | Пропуск старше срока жизни или часы сервера неверны. |
TicketWrongApp, TicketWrongAudience | Пропуск для другого приложения или другого адреса сервера. |
TicketReplayed | Тот же пропуск пришёл повторно. |
TicketRedeemUnavailable | Запрошено онлайн-подтверждение, а платформа недоступна. |
TicketBanned | Игроку сейчас нельзя играть в это приложение. |
Показывайте игрокам собственные понятные тексты. Не выводите им сырые коды.
Ключи и ротация
Открытые ключи, которыми пользуется сервер, подписаны корневым ключом, встроенным в SDK. Платформа меняет ключи подписи по расписанию и публикует действующие по адресу GET /v1/keys/tickets. Сервер с заданной GAMEWAY_API обновляет их сам; без неё он пользуется ключами из файла и из сборки SDK.
- Не копируйте ключи вручную.
- Держите
GAMEWAY_ALLOW_DEV_KEYSравной 0. Ключи для разработки нужны только локальным тестовым серверам. - Если ключ сервера утёк, немедленно замените его. Пропуска не секрет, но ключ сервера позволяет подтверждать пропуска от вашего имени.
Gameway · 2026-10-04