Хоча відповідь Філіпа ідеально хороша, є дещо інший спосіб, який не вимагає з'єднання між сервером входу та ігровим сервером, що корисно, якщо таке з'єднання важке.
- Коли користувач успішно аутентифікується на сервері входу, їм надсилається адреса сервера ігор та маркер входу, як зазначено вище. Однак цей маркер складається з 2 частин: час перебування на сервері входу та хеш цього номера плюс їх ім'я користувача, їх IP-адреса, IP-адреса або ідентифікатор ігрового сервера та секретний ключ, який ви знаєте лише ви.
- Клієнт намагається увійти на наданий ігровий сервер, надіславши цей маркер. Сервер формує той же хеш, що і раніше, на основі інформації в маркері входу, плюс власної IP-адреси / ідентифікатора та секретного ключа. Якщо цей хеш відповідає тому, що знаходиться в маркері, ви знаєте, що гравець має автентифікацію належним чином. Потім перевірте, чи дата не надто стара (наприклад, більше 1 хвилини).
Це працює тому, що:
- Його неможливо скопіювати та повторно використовувати, оскільки дата закінчується.
- Його неможливо побудувати без свіжого входу, не знаючи секретного ключа.
- Хтось інший (наприклад, за допомогою sniffer пакетів) його не може легко перехопити та використовувати, оскільки для його побудови використовується оригінальна IP-адреса.
- Його не можна використовувати для іншого облікового запису, оскільки ім'я користувача є частиною хешу.
- Його не можна використовувати для одночасних входів на різних ігрових серверах, оскільки ID / IP-адреса сервера є частиною хеша.
Або простіше кажучи, хеш гарантує, що відправник майже неможливо сфальсифікувати свій маркер для входу, і тому інформації в маркері можна довіряти.
Як і будь-яке хеш-орієнтоване на безпеку, використовуйте найкращу хеш-функцію, яку ви можете отримати - на даний момент людям здається, що вони люблять bcrypt, PBKDF2 та scrypt - і переконайтесь, що ваш секретний ключ дуже довгий, щоб зробити відтворення грубої сили менш практичним.